Node.js 开发指南上的例子, 我刚按照 http://cnodejs.org/topic/5141cf5e069911196d581966 上将
var MongoStore = require(‘connect-mongo’);
改成了
var MongoStore = require(‘connect-mongodb’);
运行 node app.js 显示在监听3000端口,正常
但是当启动浏览器键入 localhost:3000时, 就出现了这样的错误:
Express 500 TypeError: Cannot call method ‘findOne’ of null at MongoStore.MONGOSTORE.get (/Users/zhangnaixiao/Cold/node/NodeGuide/Chapter05/MicroBlog/node_modules/connect-mongodb/lib/connect-mongodb.js:115:15) at Object.session [as handle] (/Users/zhangnaixiao/Cold/node/NodeGuide/Chapter05/MicroBlog/node_modules/express/node_modules/connect/lib/middleware/session.js:311:11) at next
…
请问这是什么原因呢? 该怎么解决?
没有找到findOne模块,看看数据库中间件调用的对不对
app.use(express.session({
secret: settings.cookieSecret,
store: new MongoStore({
db: settings.db
})
}));
是指这段么?
不是没有找到findOne模块。出错信息的字面意思是"无法从null中调用findOne方法"。 可能的原因是,在初始化connect-mongodb的时候缺少某个参数(数据库连接),而这个参数对象需要有findOne方法。
有NPM上的信息可知,connect-mongodb这个模块最后一次更新是两年前了,对于发展中的Node.js而言,两年的变化是很大的,可能该模块所依赖的mongodb模块的API有所变动,才导致这个错误。
建议还是用connect-mongo
是的,查看了一下文档,conncet-mongo 是比较新的,用法是
var MongoStore = require(‘connect-mongo’)(express);