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

How to handle mongoose connection delay in node acl

我正在为我的 express 应用实施 acl usind node_acl。 我在一个单独的文件中建立数据库连接来处理猫鼬的连接时间,如下所示: 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()
  })()