刚刚毕业,换了份工作,最近有个新项目要部署,公司之前的项目使用meteor的,现在要用koa分离业务,部署的时候mongoose死活连接不上。 #连接代码
var conn = mongoose.connect('mongodb://username:password@127.0.0.1:27017/test?authMechanism=MONGODB-CR');
#报错
>MongoError: server 127.0.0.1:27017 timed out
#尝试用命令行连接
>mongo -u username -p password 127.0.0.1:27017
MongoDB shell version: 2.4.9
connecting to: 127.0.0.1:27017/test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
连接成功了,而且执行读写操作也没问题,那会不会是mongoose的问题呢? #接下来用mongoDB驱动测试下
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://username:password@127.0.0.1:27017/test?authMechanism=MONGODB-CR';
MongoClient.connect(url, function(err, db) {
console.log(err ? err : 'mongoDB连接成功!');
});
> node mongoDB.js
mongoDB连接成功!
既然mongoose是基于mongoDB驱动的,应该不大会出现这种情况。那会不会是mongoose无法识别url参数呢.接下来去掉'?authMechanism=MONGODB-CR'
这段字符串
MongoError: server 127.0.0.1:27017 timed out
果然是mongoose无法识别这段参数,接下来翻文档
[mongoose文档]http://mongoosejs.com/docs/api.html
Ctrl+F 粘贴authMechanism没找到,直接点击connection.js在里面找到这一行
auth - options for authentication (see http://mongodb.github.com/node-mongodb-native/api-generated/db.html#authenticate)
点击进去就找到我们想要的了。
修改代码,以Object的方式配置options!
const options = {
user : "username",
pass : "password",
auth : {authMechanism: 'MONGODB-CR'}
}
var conn = mongoose.connect('mongodb://@127.0.0.1:27017/test',options);
重新运行 node app.js
[2016-08-22 15:21:39.709] [INFO] console - app listen to 3000, NODE_ENV: development
完美!!!
坑嘛, 踩踩更健康, 特别对于我们这些新手来说。