当前位置:  开发笔记 > 编程语言 > 正文

在ExpressJS上使用mongoose运行'node_acl'

如何解决《在ExpressJS上使用mongoose运行'node_acl'》经验,为你挑选了2个好方法。

我正在ExpressJS上构建一个应用程序(类似于博客).我正在使用mongoose与MongoDB一起工作.

当我不得不在各种ACL模块之间进行选择时,我决定使用 node_acl.令我困惑的是它使用的是mongodb模块而不是mongoose.

根据ACL GitHub上的文档,它必须以这种方式使用:

// Or Using the mongodb backend
acl = new acl(new acl.mongodbBackend(dbInstance, prefix));

如果我使用mongoose,那么db的实例是什么?

我使用类似的东西:Account = mongoose.model('Account',new Schema({...}));



1> Valorum..:

在我的头顶,我想你正在寻找这个:

http://mongoosejs.com/docs/api.html#connection_Connection-db

示例(未测试):

var mongoose = require('mongoose'),
    acl = require('acl');

acl = new acl(new acl.mongodbBackend(mongoose.connection.db, 'acl_'));

(这当然是假设你已经使用mongoose.connect()在其他地方初始化了Mongoose.)


我试过这种方式,但我没有成功.ACL集合未出现在我的数据库中,系统无法运行.

2> 小智..:

我最近碰巧遇到了这个问题.我在stackoverflow上尝试了很多解决方案但是徒劳无功.最后我找到了问题的原因.只想分享我解决这个问题的经验.通常人们将db config和acl config分开,从而导致此问题.

问题的根源是node.js的本机功能 - 异步.如果您尝试使用以下方式记录连接状态:

console.log(mongoose.connection.readyState);

您将在db.js中找到它,它是1(已连接); 在你的acl.js中,如果你没有在确保mongodb已连接的正确块中制作acl,它将是2(连接).

如果您遵循投票最多和最新的答案,您的代码可能如下所示:

var acl = require('acl');
var mongoose = require('../model/db');
mongoose.connection.on('connected', function(error){
    if (error) throw error;   
    //you must set up the db when mongoose is connected or your will not be able to write any document into it
    acl = new acl(new acl.mongodbBackend(mongoose.connection.db, 'acl_'));

});

然后您可能想要设置权限和角色.但请记住在已建立与mongodb的连接的块中进行这些操作.所以最后你的代码应该是这样的:

var acl = require('acl');
var mongoose = require('../model/db');
mongoose.connection.on('connected', function(error){
    if (error) throw error;   
    //you must set up the db when mongoose is connected or your will not be able to write any document into it
    acl = new acl(new acl.mongodbBackend(mongoose.connection.db, 'acl_'));

    //Do acl.allow('role', ['resources'], ['actions'] here
    initACLPermissions();
    //Do acl.addUserRolss('id', 'role') here
    initACLRoles();

});

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有