求教Nodejs访问mongodb的问题
求教Nodejs访问mongodb的问题
代码如下: app.use(express.session({ cookie:{maxAge:60000*30}, secret:settings.cookieSecret, store:new MongoStore({db:settings.db}) })); settings是一个模块,里面主要是数据库的配置.运行报如下异常: TypeError: Cannot read property ‘Store’ of undefined 使用的express是3.x版本的。是不是3.x版本不是这么用了?
根据你提供的信息,问题主要出现在使用 express-session
和 connect-mongo
(一个用于将会话存储在 MongoDB 中的中间件)时。在 Express 3.x 版本中,express-session
的配置方式确实有所不同。
解决方案
首先,确保你已经安装了必要的依赖包:
npm install express express-session connect-mongo mongodb --save
然后,更新你的代码以正确配置 express-session
和 MongoStore
。以下是修正后的示例代码:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const settings = require('./settings'); // 假设这是你的配置文件
const app = express();
app.use(session({
cookie: { maxAge: 60000 * 30 },
secret: settings.cookieSecret,
store: new MongoStore({
url: `mongodb://${settings.dbHost}:${settings.dbPort}/${settings.dbName}`
})
}));
// 其他中间件和路由定义
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
关键点解释
- 引入模块:确保正确引入了
express-session
、connect-mongo
和mongodb
模块。 - 配置
MongoStore
:MongoStore
需要通过require('connect-mongo')(session)
来创建。这会返回一个构造函数,可以用来实例化新的存储对象。 - 设置存储选项:
store
选项现在应该是一个由MongoStore
构造函数创建的新实例,并且需要传入一个配置对象,该对象包含了连接到 MongoDB 所需的信息(例如 URL 或其他连接参数)。
注意事项
- 确保
settings
对象中包含正确的数据库配置信息,如dbHost
、dbPort
和dbName
。 - 如果你使用的是较新的
connect-mongo
版本,可能需要查阅最新的文档来确认正确的配置方法。
以上代码应该能解决你遇到的 TypeError
问题,并正确地将会话数据存储到 MongoDB 中。
用用老吴的rrestjs架构把,做过java、php开发的用这套框架比express用着舒服。 https://github.com/yuyu1911/rrestjs
另外解决下你这个代码的问题,这个框架我第一次用就感觉不舒服,不过看你的问题,应该是还有数据库的store没有配置吧
你杂知道我姓吴?谢谢捧场啊,你应该贴官网。。我已经更新到0.8版本呢了。这个比较老
根据你的描述,你在使用Express 3.x版本时遇到了TypeError: Cannot read property 'Store' of undefined
的错误。这通常是由于MongoStore没有正确加载或安装导致的。在Express 3.x中,MongoStore需要通过connect-mongo
包来实现。
解决方法
-
安装
connect-mongo
包:npm install connect-mongo --save
-
更新代码以使用
connect-mongo
:var express = require('express'); var session = require('express-session'); var MongoStore = require('connect-mongo')(session); var settings = require('./settings'); // 假设你的设置文件路径是这样 var app = express(); app.use(session({ cookie: { maxAge: 60000 * 30 }, secret: settings.cookieSecret, store: new MongoStore({ url: settings.db // 使用连接字符串 }) })); // 启动应用 app.listen(3000, () => { console.log('App is running on port 3000'); });
-
确保你的
settings.js
文件包含正确的数据库连接字符串:module.exports = { db: 'mongodb://localhost/test', // 你的MongoDB连接字符串 cookieSecret: 'your_secret_key_here' };
总结
Express 3.x 中使用MongoStore需要通过 connect-mongo
包来实现,而不是直接使用 express-session
的内置 Store
。确保你正确安装了 connect-mongo
并在代码中正确引用它。此外,确保你的数据库连接字符串格式正确。