求教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版本不是这么用了?

6 回复

根据你提供的信息,问题主要出现在使用 express-sessionconnect-mongo(一个用于将会话存储在 MongoDB 中的中间件)时。在 Express 3.x 版本中,express-session 的配置方式确实有所不同。

解决方案

首先,确保你已经安装了必要的依赖包:

npm install express express-session connect-mongo mongodb --save

然后,更新你的代码以正确配置 express-sessionMongoStore。以下是修正后的示例代码:

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');
});

关键点解释

  1. 引入模块:确保正确引入了 express-sessionconnect-mongomongodb 模块。
  2. 配置 MongoStoreMongoStore 需要通过 require('connect-mongo')(session) 来创建。这会返回一个构造函数,可以用来实例化新的存储对象。
  3. 设置存储选项store 选项现在应该是一个由 MongoStore 构造函数创建的新实例,并且需要传入一个配置对象,该对象包含了连接到 MongoDB 所需的信息(例如 URL 或其他连接参数)。

注意事项

  • 确保 settings 对象中包含正确的数据库配置信息,如 dbHostdbPortdbName
  • 如果你使用的是较新的 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包来实现。

解决方法

  1. 安装 connect-mongo

    npm install connect-mongo --save
    
  2. 更新代码以使用 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');
    });
    
  3. 确保你的 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 并在代码中正确引用它。此外,确保你的数据库连接字符串格式正确。

回到顶部