记录一个坑,终端直接使用mongo
验证登录成功,但是使用mongoose
库验证登录时却返回MongoTimeoutError: Server selection timed out after 30000 ms
。
解决方案,添加authSource=admin
mongoose.connect('mongodb://koa:123456@localhost:27017/koa?authSource=admin', {
useNewUrlParser: true,
useUnifiedTopology: true
})
更新(2019-11-25)
如果上面的方案已经解决了你的问题,以下内容请略过。
如果添加了authSource=admin
还是无法连接,那很有可能是你的koa
账户有问题,该账户并非是超级管理员进入admin
数据库后创建的,总结两点:
- 必须是超级管理员来创建,比如
root
- 超级管理员进入
admin
数据库后创建
# 使用超级管理员连接数据库
$ mongo -u admin -p 123456
# 进入admin数据库
$ use admin
# 创建账户
$ db.createUser({user:"grg",pwd:"123456",roles:[{role:"dbOwner",db:"grg"}]})
更新(2020-02-03)
如果上面的方案已经解决了你的问题,以下内容请略过。
如果不是账户问题,则很可能是你的当前网络不稳定,比如连接境外服务器上的MongoDB
数据库时会经常自动断开。