Nodejs Mongoose 错误:getaddrinfo ENOTFOUND undefined undefined:27017

mla*_*amp 4 mongoose mongodb node.js

我试图从只使用本机 mongodb 切换到 mongoose,但遇到了一些麻烦。

像我以前那样连接到数据库工作正常:

var db;

var passDb = function(req, res, next) {
    if (!db) {
        mongo.connect(process.env.MONGOLAB_URI, function(err, database) {
            if (err) throw err;
            db = database;

            req.db = db;
          next();
        });
    } else {
      req.db = db;
      next();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我现在尝试这样做的方式会引发错误:

var mongoose     = require('mongoose');

var Poll         = require('./app/models/poll');

mongoose.connect(process.env.MONGOLAB_URI);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  // we're connected!
});
Run Code Online (Sandbox Code Playgroud)

错误:

connection error: { [MongoError: getaddrinfo ENOTFOUND undefined undefined:27017
]
  name: 'MongoError',
  message: 'getaddrinfo ENOTFOUND undefined undefined:27017' }
Run Code Online (Sandbox Code Playgroud)

任何想法是什么导致了这种情况?

编辑:它在我直接使用数据库 uri 时有效,但在我使用环境变量时无效。我已经检查并三重检查所有内容是否正确输入,它拒绝使用环境变量,我必须将其直接放入代码中:S

jav*_*ved 8

添加directConnection=true到连接字符串对我有用

mongoose.connect("MONGO_URI=mongodb://localhost:27017/test-db?directConnection=true
"); 
Run Code Online (Sandbox Code Playgroud)


mla*_*amp 7

好的,我发现了我的错误,我在调用require('dotenv').load();. 谜团已揭开!

mongoose.connect(process.env.MONGOLAB_URI); 现在有效!