node.js - 生产中的 MongoDB 查询(身份验证)不起作用

标签 node.js mongodb express mongoose mongodb-query

我正在使用 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/

相关文章:

javascript - 维护和组织 ExpressJS 路由

node.js - VS Code 无法识别 Jest,使用 Intellisense 下划线

python - Flask Pymongo Insert 返回一个集合对象而不是 _id

javascript - 构建时有什么方法可以使 Electron 在后台执行nodejs文件服务器吗?

node.js - 使用 RequireJS 从 CDN 加载本地项目静态资源

mongodb - 添加root用户后如何在MongoDB中使用Auth

javascript - 如何使用javascript在json中动态添加两个键值并显示在另一个键值中

node.js - sails.js 中的多个数据库连接,每个连接具有迁移设置

node.js - 如何在开源项目中隐藏 Twitter Oauth 的消费者 secret ?

mongodb - MongoDB是否以某种方式仅限于单核?