Node.js 如何异步返回sequelize实例?
我似乎无法正确地将Node.js 如何异步返回sequelize实例?,node.js,sequelize.js,Node.js,Sequelize.js,我似乎无法正确地将service.js文件中的sequelize对象传递到index.jssequelize变量 有什么不对劲的地方吗 index.js let sequelize; let contractModel; (async () => { sequelize = await lambdaHelper.init(); //The issue is here contractModel = require('./models/Contract')(sequeliz
service.js
文件中的sequelize
对象传递到index.js
sequelize变量
有什么不对劲的地方吗
index.js
let sequelize;
let contractModel;
(async () => {
sequelize = await lambdaHelper.init(); //The issue is here
contractModel = require('./models/Contract')(sequelize, Sequelize);
})();
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;
};
service.js
let sequelize;
let contractModel;
(async () => {
sequelize = await lambdaHelper.init(); //The issue is here
contractModel = require('./models/Contract')(sequelize, Sequelize);
})();
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
}
});
结果
let sequelize;
let contractModel;
(async () => {
sequelize = await lambdaHelper.init(); //The issue is here
contractModel = require('./models/Contract')(sequelize, Sequelize);
})();
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;
};
***********在*******(节点:66912)之前未处理的PromiserEjectionWarning:未处理的承诺拒绝
(拒绝id:1):TypeError:无法读取的属性“findAll”
未定义(节点:66912)[DEP0018]弃用警告:未处理的承诺
不赞成拒绝。在未来,承诺拒绝
not handled将以非零出口终止Node.js进程
代码
结果2
***********在*******(节点:66540)之前未处理的PromiserEjectionWarning:未处理的承诺拒绝
(拒绝id:1):TypeError:无法读取的属性“findAll”
未定义(节点:66540)[DEP0018]弃用警告:未处理的承诺
不赞成拒绝。在未来,承诺拒绝
not handled将以非零出口终止Node.js进程
代码。正在执行(默认):选择1+1作为结果类型错误:无法读取
未定义的属性“define”
at module.exports at
wait new Sequelize(…)
在上面的代码中,期望new Sequelize
返回承诺,但事实并非如此。有一种方法可以做到这一点
应该是:
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);
请参见OP2中的结果2添加
验证和捕获后是否会发生这种情况?导致问题的代码未出现在OP.1中的建议错误之后change@Rod刚刚注意到authenticate
不应该返回连接,更新了答案。不确定它是否会影响你的问题。很高兴它起到了作用。