我正在使用 NodeJS 和 Mongoose 编写一个非常简单的应用程序。
如果我在 Mongoose 中禁用身份验证,一切都会正常,我可以从数据库访问我的记录。但是,当我打开身份验证并将 NodeJS 代码配置为使用经过身份验证的 Mongoose 连接时,它不允许我查询我的记录,并且网页会继续加载。
我的数据库名称是“bears”。
附注我已经在“Admin 数据库和 Bears”数据库中创建了我的用户。我已授予图书用户数据库读写权限,当我通过“Mongo”命令或 db.auth 命令对其进行身份验证时,它工作正常。但它无法通过 NodeJS/Mongoose 工作。
这是我的代码。
var mongoose = require('mongoose');
var opt = {
user: 'bearsdev',
pass: 'bearsdev123!',
auth: {
authdb: 'bears'
}
};
mongoose.connect('mongodb://localhost:27017/bearsdev',opt);
var Schema = mongoose.Schema;
var BearSchema = new Schema({
name: String
});
module.exports = mongoose.model('Bear', BearSchema);
在我的 server.js 中
var express = require('express'); // call express
var app = express(); // define our app using express
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var Bear = require('../models/bear');
var bear = require('express').Router();
bear.get('/', function(req, res) {
res.json({ message: 'hooray! welcome to our api!' });
});
bear.get('/bear',function(req, res) {
Bear.find(function(err, bears) {
if (err)
res.send(err);
res.json(bears);
});
});
app.use('/test', bear);
app.listen(8080);
localhost:8080/test 有效。 localhost:8080/test/bear 继续加载。
我尝试过使用 Mongoose 进行身份验证的不同方式,例如
mongoose.connect('mongodb://bearsdev:bearsdev123!@localhost:27017?authSource=bearsdev');
和
mongoose.connect('mongodb://bearsdev:bearsdev123!@localhost:27017/bearsdev');
这些方法都不适合我。
最佳答案
我希望下面的代码可以工作。
database = {
host: 'localhost',
db: 'bears',
port: '27017',
options: {
user: "bearsdev",
pass: "bearsdev123!",
auth: {
authdb: 'admin'
}
}
}
mongoose.connect(database.host, database.db, database.port, database.options, function (err) {
if (err) {
console.log("connection error:", err);
} else {
console.log("MongoDB connection successful");
}
});
关于node.js - 生产中的 MongoDB 查询(身份验证)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39249244/