节点 ACl 抛出未经处理的拒绝错误

Node-ACl throws uhandled rejection error

我在我的 express 中使用 ACL 模块 application.At 服务器的启动我使用 acl.allow() 函数定义了一些角色及其权限。

但是它记录了一个错误,说未定义的拒绝 type.The 错误在给出错误的回调时消失 param.But 我不太确定是什么引发了错误以及应该如何处理它。

我正在使用的代码片段是:

    var aclmodule = new acl(new acl.mongodbBackend(config.db.URL, "accesscontrol_"));
    aclmodule.allow([
    {
        roles:['rolea'],
        allows:[
            {resources:['a','b'], permissions:['*']}
        ]
    },
    {
        roles:['roleb','rolec'],
        allows:[
            {resources:['a'], permissions:['view']}
        ]
    },
    {
        roles:['rolec'],
        allows:[
            {resources:['o'], permissions:['view','edit']}
        ]
    }
]);

});

控制台中记录的错误是:

Unhandled rejection TypeError: undefined is not a function at D:\user\web\myapp-web\node_modules\acl\lib\mongodb-backend.js:119:15

at D:\myapp\web\myapp-web\node_modules\acl\node_modules\async\lib\async.

js:607:21 at D:\myapp\web\myapp-web\node_modules\acl\node_modules\async\lib\async. js:246:17 at iterate (D:\myapp\web\myapp-web\node_modules\acl\node_modules\async\l ib\async.js:146:13) at async.eachSeries (D:\myapp\web\myapp-web\node_modules\acl\node_module s\async\lib\async.js:162:9) at _asyncMap (D:\myapp\web\myapp-web\node_modules\acl\node_modules\async \lib\async.js:245:13) at Object.mapSeries (D:\myapp\web\myapp-web\node_modules\acl\node_module s\async\lib\async.js:228:23) at Object.async.series (D:\myapp\web\myapp-web\node_modules\acl\node_mod ules\async\lib\async.js:605:19) at Object.MongoDBBackend.end (D:\myapp\web\myapp-web\node_modules\acl\li b\mongodb-backend.js:35:11) at Object.tryCatcher (D:\myapp\web\myapp-web\node_modules\acl\node_modul es\bluebird\js\main\util.js:26:23) at Object.ret [as endAsync] (eval at (D:\myapp\web\myapp-web \node_modules\acl\node_modules\bluebird\js\main\promisify.js:163:12),

config.db.URL是字符串吗?如果是这样,这就是您出错的原因。它失败的行是(在mongodb-backend.js):

self.db.collection(... -- 表示 .collection() 未定义。 (如果 "self.db" 只是一个字符串,这就有意义了。)

Node-acl 在创建新的 mongodbBackend 时需要一个 数据库实例 ,喜欢它 says in the docs -- for example:

 mongoose.connection.on('connected', function() {
    var myAcl = new acl(new acl.mongodbBackend(mongoose.connection.db));
});