Node.js 使用nodejs和Monk进行Mongodb身份验证

Node.js 使用nodejs和Monk进行Mongodb身份验证,node.js,mongodb,express,monk,Node.js,Mongodb,Express,Monk,在尝试查询mongodb上的集合时,我一直遇到一个错误,我在app.js文件中已成功连接到该集合 var mongo = require('mongodb'); var monk = require('monk'); var db = monk('mongodb://USERNAME:PASSWORD@localhost:27017/test_db'); var app = express(); // Make our db accessible to our router app.use(

在尝试查询mongodb上的集合时,我一直遇到一个错误,我在
app.js
文件中已成功连接到该集合

var mongo = require('mongodb');
var monk = require('monk');
var db = monk('mongodb://USERNAME:PASSWORD@localhost:27017/test_db');

var app = express();

// Make our db accessible to our router
app.use(function(req,res,next){
        req.db = db;
        next();
});
它连接,然后在我的路由器文件中:

/* users.js*/

router.post('/login', function(req, res, next) {

   var params = req.body;
   var userid = params.userid;
   var pw     = params.password
   var db = req.db;
   var userdb = db.get('users');
   userdb.findOne({'userid' : userid}, function(e,user) {
     if (e) {
       console.log("error reading user doc ->");
       console.log(e);
       return;
     } else {
       ....
     }
  });
});
查询集合后,我发现以下错误:

{ [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 }

查看MongoDB文档以获取选项:

您会注意到用户名和密码是无效的选项。如果您正在连接到test_db,并且您的根用户在另一个数据库中(比如admin),那么您应该使用authSource:admin。您的连接字符串如下所示:

var db = monk('user:pass@localhost:27017/test_db',{authSource:'admin'});
当我试图连接到我的数据库时,这让我很困惑,但我的auth用户在另一个数据库中


希望它能帮助别人

查看MongoDB文档中的选项:

您会注意到用户名和密码是无效的选项。如果您正在连接到test_db,并且您的根用户在另一个数据库中(比如admin),那么您应该使用authSource:admin。您的连接字符串如下所示:

var db = monk('user:pass@localhost:27017/test_db',{authSource:'admin'});
当我试图连接到我的数据库时,这让我很困惑,但我的auth用户在另一个数据库中


希望它能帮助别人

格式化程序(URL,{username,password})也不起作用。问题是URI对密码进行编码以允许使用特殊字符,执行此操作时必须传递对象{URI_decode_auth:true}格式设置(URL,{username,password})也不起作用。问题是URI编码密码以允许使用特殊字符,执行此操作时必须传递对象{URI_decode_auth:true}第二个选项有效,但我无法使第一个选项起作用。第二个选项有效,但我无法使第一个选项起作用。