node.js - connect-mongo链接数据库报错
巴扎黑
巴扎黑 2017-04-17 15:28:28
0
3
665

正在拜读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:\learnNode\nodeBlog\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\error.js:31:11)
    at queryCallback (E:\learnNode\nodeBlog\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:213:36)
    at E:\learnNode\nodeBlog\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\connection\pool.js:455:18
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickCallback (node.js:349:13)

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

> use myblog
switched 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:\learnNode\nodeBlog\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\error.js:31:11)
    at queryCallback (E:\learnNode\nodeBlog\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:213:36)
    at E:\learnNode\nodeBlog\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\connection\pool.js:455:18
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickCallback (node.js:349:13)

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

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

巴扎黑
巴扎黑

répondre à tous(3)
迷茫

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

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

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

伊谢尔伦

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal