如何处理节点acl中的猫鼬连接延迟



我正在为我的express应用程序实现acl-usind node_acl。我在一个单独的文件中进行数据库连接,以处理mongoose的连接时间,如下所示:connect.js:

const   mongoose = require('mongoose');
module.exports = function initConnection(callback) {
mongoose.connect('mongodb://127.0.0.1:27017/aclExample', {});
var db = mongoose.connection;
db1 = mongoose.connection.db;
db.on('error', function (err) {
console.error('Failed to connect to database');
process.exit(1);
});
db.once('open', function () {
console.info("Connected to database");
callback(db1);
console.log('acl is now set');
});
};

并将其包含在app.js中以创建类似的acl对象

var node_acl = require('acl');
var connectACL = require('@root/fe-server/middlewares/fe.middleware.acl.js');
connectACL(function(db){
acl = new node_acl(new node_acl.mongodbBackend(db, 'acl_'));
});
console.log('ACL: ',acl);

问题是console.log在建立数据库连接之前就已经执行了。我该如何处理?我必须在我的app.js和其他文件中使用acl进行路由授权,所以在回调中使用它总是没有意义的。提前谢谢。

您可以承诺创建acl,或者将其移动到某种初始化层。

const promise = new Promise(resolve => connectACL(resolve));
promise.then(db => { 
return new new node_acl.mongodbBackend(db, 'acl_')
})
.then(acl => {
APP.setAcl(acl);
APP.bootsrtap()
})
//or with node 7.8+
(async (){
const db = await new Promise(resolve => connectACL(resolve));
const acl = new node_acl.mongodbBackend(db, 'acl_');
application.bootstrapOrSomethingLikeThis()
})()

最新更新