node.js - connect-mongo链接数据库报错

浏览:31日期:2022-09-30

问题描述

正在拜读https://github.com/nswbmw/N-blog,看到这里 出现了难以解决的错误:

首先我的本地数据库是开启了用户验证的,这个例子暂时是没有的,请看我的本地入口文件:

·var session = require(’express-session’);var MongoStore = require(’connect-mongo’)(session);var flash = require(’connect-flash’);var config = require(’config-lite’);···app.use(session({ name: config.session.key,// 设置 cookie 中保存 session id 的字段名称 secret: config.session.secret,// 通过设置 secret 来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改 cookie: { maxAge: config.session.maxAge// 过期时间,过期后 cookie 中的 session id 自动删除 }, store: new MongoStore({// 将 session 存储到 mongodb url: config.mongodb// mongodb 地址 })}));// flash 中间价,用来显示通知app.use(flash());// 设置模板全局常量app.locals.blog = { title: pkg.name, description: pkg.description};// 添加模板必需的三个变量app.use(function (req, res, next) { res.locals.user = req.session.user; res.locals.success = req.flash(’success’).toString(); res.locals.error = req.flash(’error’).toString(); next();});··

然后是为config创建的默认文件:

module.exports = { port: 3000, session: { secret: ’myblog’, key: ’myblog’, maxAge: 2592000000 }, mongodb: ’mongodb://localhost:27017/myblog’};

可以看出我这里没有用户验证,所以运行程序后显示

Unhandled rejection MongoError: not authorized on myblog to execute command { listIndexes: 'sessions', cursor: {} } at Function.MongoError.create (E:learnNodenodeBlognode_modulesconnect-mongonode_modulesmongodbnode_modulesmongodb-coreliberror.js:31:11) at queryCallback (E:learnNodenodeBlognode_modulesconnect-mongonode_modulesmongodbnode_modulesmongodb-corelibcursor.js:213:36) at E:learnNodenodeBlognode_modulesconnect-mongonode_modulesmongodbnode_modulesmongodb-corelibconnectionpool.js:455:18 at nextTickCallbackWith0Args (node.js:420:9) at process._tickCallback (node.js:349:13)

我在本地新建了myblog数据库,然后添加了用户

> use myblogswitched to db myblog> show users{'_id' : 'myblog.test','user' : 'test','db' : 'myblog','roles' : [{'role' : 'dbOwner','db' : 'myblog'}]}{'_id' : 'myblog.myblog','user' : 'myblog','db' : 'myblog','roles' : [{'role' : 'dbAdmin','db' : 'myblog'}]}

并且更改了接入的mongodb的地址:

module.exports = { port: 3000, session: { secret: ’myblog’, key: ’myblog’, maxAge: 2592000000 }, mongodb: ’mongodb://myblog:myblog@localhost:27017/myblog’};

这次运行没有报错,但是当我尝试打开任何页面时,又出错了:

MongoError: not authorized on myblog to execute command { find: 'sessions', filter: { _id: 'm0DdUbQOkBt9if1E68C230avYqyCgpLU', $or: [ { expires: { $exists: false } }, { expires: { $gt: new Date(1478591799060) } } ] }, limit: 1, batchSize: 1, singleBatch: true } at Function.MongoError.create (E:learnNodenodeBlognode_modulesconnect-mongonode_modulesmongodbnode_modulesmongodb-coreliberror.js:31:11) at queryCallback (E:learnNodenodeBlognode_modulesconnect-mongonode_modulesmongodbnode_modulesmongodb-corelibcursor.js:213:36) at E:learnNodenodeBlognode_modulesconnect-mongonode_modulesmongodbnode_modulesmongodb-corelibconnectionpool.js:455:18 at nextTickCallbackWith0Args (node.js:420:9) at process._tickCallback (node.js:349:13)

问了公司的人员,说是刚开始是链接的,但是可能又断开了,当我访问网页时就不能写入了?

所以请大家帮忙看看怎么回事?多谢了!

问题解答

回答1:

今天换成我们数据库原来的用户名和密码,就可以了。原来的用户admin是有root权限的,但我创建的myblog用户也是有读写权限的,不知道为什么就不行。昨天被这个纠结了好久,没想到今天一下灵光闪现。

回答2:

先用命令行登上去执行看看,会不会报错,定位问题,db.auth(’myblog’, ’myblog’)返回了0还是1

’mongodb://myblog:myblog@localhost:27017/myblog’ 这个user和pwd之间的空格是你复制多出来的吗???????? 还是说你代码的连接串写错了

回答3:

@守望回音 我也做的这个项目,遇到了同样的问题,没看懂下面的解答,请问咋解决?

相关文章: