此Meteor应用程序在尝试调用保存在常量变量"中的导出异步函数时给出错误TypeError: vinXXX is not a function
;vinXXX";从方法follder中导入的sibing文件夹中的方法调用中。知道为什么以及如何修复它吗?感谢
//imports/api/vehicles/methods.js
import { vinXXX } from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = vinXXX;
因此,基本上您已经获得了混合了commonJS导出语法的ES模块导入语法。由于Meteor传输代码的方式,这两者可能会混合在一起,但你必须了解它们是如何工作的,这样你才能存储和检索数据,以便它们协同工作。
要使其使用混合语法,您的导入需要更改为ES模块默认导入语法,或者您需要更改导出以在导出的对象上具有命名属性。
将导出更改为具有命名导入属性的对象
//imports/api/vehicles/methods.js
import vinXXX from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = { vinXXX };
将导入更改为默认ES模块导入
//imports/api/vehicles/methods.js
import { vinXXX } from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = vinXXX;
当然,您可以使用其中一种或另一种语法,而无需混合它们。
CommonJS默认导出
//imports/api/vehicles/methods.js
const vinXXX = require('./vinXXX.js')
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = vinXXX;
CommonJs命名为导出
//imports/api/vehicles/methods.js
const { vinXXX } = require('./vinXXX.js')
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = { vinXXX };
ES模块默认语法
//imports/api/vehicles/methods.js
import vinXXX from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
export default async (plate, state) => {...}
ES模块命名为导出
//imports/api/vehicles/methods.js
import { vinXXX } from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU'); // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
export const vinXXX = async (plate, state) => {...}
您将导出设置为vinXXX
本身,而不是包含它的对象。因此,您的导入需要为默认值:
import vinXXX from './vinXXX.js'