我试图仅使用原生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();
}
}
但我尝试这样做的方式现在引发错误:
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!
});
错误:
connection error: { [MongoError: getaddrinfo ENOTFOUND undefined undefined:27017
]
name: 'MongoError',
message: 'getaddrinfo ENOTFOUND undefined undefined:27017' }
任何想法导致了什么?
编辑:当我直接使用数据库uri时它可以工作,但是当我使用环境变量时却不行。我已检查并三重检查所有内容是否正确输入,它拒绝使用环境变量,我必须将其直接放在代码中:S
答案 0 :(得分:3)
好的,我弄清楚了我的错误,我在调用require('dotenv').load();
之前连接到数据库。神秘解决了!
mongoose.connect(process.env.MONGOLAB_URI);
现在有效!
答案 1 :(得分:1)
我认为您忘记定义env变量 也许您忘记了在服务器或启动文件上调用dotenv软件包的config方法 配置它
const dotenv = require("dotenv")
dotenv.config()
在您观看的文件或启动器上... 然后使用process.env.VARIABLE 或者为了测试您的mongo连接,请使用简单的字符串url 像这样:
mongodb:// localhost:27017 / database_name