我似乎无法正确地将sequelize
对象从service.js
文件传递到index.js
sequelize变量。
有什么东西看起来不合适吗?
index.js
let sequelize;
let contractModel;
(async () => {
sequelize = await lambdaHelper.init(); //The issue is here
contractModel = require('./models/Contract')(sequelize, Sequelize);
})();
service.js
exports.init = async () => {
let sequelize = await new Sequelize(process.env.FNI_DATABASE, process.env.FNI_USER, process.env.FNI_PASSWORD, {
host: process.env.FNI_HOST,
dialect: 'mysql',
operatorsAliases: false,
define: {
timestamps: false,
freezeTableName: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
return sequelize;
};
service2.js以下代码同步工作
exports.init = () => new Sequelize(process.env.FNI_DATABASE, process.env.FNI_USER, process.env.FNI_PASSWORD, {
host: process.env.FNI_HOST,
dialect: 'mysql',
logging: false,
operatorsAliases: false,
define: {
timestamps: false,
freezeTableName: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
结果
***********之前的***********(节点:66912(未处理的PromiseRejection警告:未处理的promise拒绝(拒绝id:1(:TypeError:无法读取的属性"findAll"未定义(节点:66912([DEP0018]不推荐警告:未处理的承诺拒绝被否决。在未来,承诺拒绝未处理将以非零退出终止Node.js进程密码
结果2
***********之前的***********(节点:66540(未处理的PromiseRejection警告:未处理的promise拒绝(拒绝id:1(:TypeError:无法读取的属性"findAll"未定义(节点:66540([DEP0018]不推荐警告:未处理的承诺拒绝被否决。在未来,承诺拒绝未处理将以非零退出终止Node.js进程密码正在执行(默认(:SELECT 1+1 AS结果类型错误:无法读取未定义的属性"define"在模块上。在上导出
await new Sequelize(...)
在上面的代码中期望new Sequelize
返回promise,而事实并非如此。有authenticate
方法可以做到这一点。
应该是:
exports.init = async () => {
let sequelize = new Sequelize(...);
await sequelize.authenticate();
return sequelize;
};
确保承诺拒绝始终得到妥善处理:
(async () => {
sequelize = await lambdaHelper.init();
contractModel = require('./models/Contract')(sequelize, Sequelize);
})().catch(console.error);