Node.js 使用nodejs和Monk进行Mongodb身份验证
在尝试查询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(
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}第二个选项有效,但我无法使第一个选项起作用。第二个选项有效,但我无法使第一个选项起作用。