TypeError: Cannot call method 'findOne' of null
发布于 1年前 作者 znx5858 902 次浏览

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

请问这是什么原因呢? 该怎么解决?

5 回复

没有找到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);

回到顶部