Nodejs 请教 Express 4 中如何使用connect-mongo
Nodejs 请教 Express 4 中如何使用connect-mongo
https://github.com/nswbmw/N-blog/wiki/第1章–一个简单的博客
正在跟随上面的教程一步一步做,在会话支持那一节中安装 connect-mongo
后,添加:
var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');
和
app.use(express.cookieParser());
app.use(express.session({
// ......
})
}));
之后运行报错:
Error: Most middleware (like session) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.
求问在 Express 4 中该如何处理这个中间件
当然可以!在 Express 4 中,express
库本身不再包含许多中间件,包括 cookieParser
和 session
。你需要单独安装这些中间件。以下是针对你提到的问题的具体步骤和示例代码。
安装必要的依赖
首先,确保你已经安装了以下依赖:
npm install express connect-mongo cookie-parser
示例代码
接下来,你需要更新你的代码以适应 Express 4 的变化。下面是完整的示例代码:
// 导入必要的模块
const express = require('express');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session); // 使用新的语法
const settings = require('./settings');
// 创建应用实例
const app = express();
// 使用 cookieParser 中间件
app.use(cookieParser());
// 使用 session 中间件,并配置 MongoDB 存储
app.use(session({
secret: settings.cookieSecret, // 你的密钥
key: settings.db, // cookie 名称
cookie: { maxAge: 1000 * 60 * 60 * 24 * 30 }, // 设置过期时间(毫秒)
store: new MongoStore({ // 使用 connect-mongo 作为存储
url: settings.url // MongoDB 连接字符串
}),
}));
// 示例路由
app.get('/', (req, res) => {
req.session.name = 'John Doe'; // 设置 session
res.send('Hello World!');
});
// 启动服务器
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
解释
-
导入模块:
express
是核心框架。cookie-parser
用于解析 cookies。express-session
用于处理 sessions。connect-mongo
用于将 sessions 存储到 MongoDB 中。
-
创建应用实例:
const app = express();
创建了一个 Express 应用实例。
-
使用中间件:
app.use(cookieParser());
使用cookieParser
中间件来解析 cookies。app.use(session({...}))
使用express-session
中间件,并配置MongoStore
来将 session 数据存储到 MongoDB 中。
-
配置 MongoDB 存储:
store: new MongoStore({ url: settings.url })
配置了MongoStore
使用指定的 MongoDB 连接字符串。
-
启动服务器:
app.listen(port, ...)
启动服务器并监听指定端口。
通过以上步骤,你应该能够成功地在 Express 4 中使用 connect-mongo
来管理 session 数据。希望这对你有帮助!
express 4 跟之前很不同。 比如 express.session 和 express.cookieParser 都已经不存在了。 express 和 中间件已经剥离了,除了 express.static。
跟mongodb无关 去抓connect 然后把epxress.XXX 改成connect.XXX
我改成了这样: var MongoStore = require(‘connect-mongo’)(connect); var settings = require(’./settings’); var connect = require(‘connect’);
app.use(cookieParser()); app.use(connect.session({ //… }));
我把connect-mongo.js也换成了git上的兼容4.x的版本, 也用npm安装了connect,运行报错: var Store = connect.Store || connect.session.Store; ^ TypeError: Cannot read property ‘Store’ of undefined
恩,读了一下各个的说明,按照新的规则试着改了改,结果还是出错,有些头大,代码在二楼
var connect = require(‘connect’); var session = require(‘express-session’); var MongoStore = require(‘connect-mongo’)(connect);
app.use(session({ secret: settings.cookieSecret, store: new MongoStore({ db: settings.db }) }));
我这样子好像就OK了。
谢谢,可以了!令我奇怪的是我之前也有尝试过使用express-session,但是依旧出错。 看了你的回答之后我调整了一下代码顺序结果成功了,应该是我的代码顺序不对造成的。
我也在写这个例子,感觉书中的代码都过时了,这个头大,希望可以交流一下,指点一下小弟
书中是基于Express 3.x 版本进行开发的, 在 Express 升级到4.x 之后session中间件已经不再内置了, 需要自己安装, 并且使用方式也不一样了. Express 4.x 中使用方式改为了这样:
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
app.use(session({
secret: ‘foo’,
store: new MongoStore(options)
}));
而 Express 3.x 中是这样的:
var MongoStore = require('connect-mongo')(express);
app.use(express.session({
secret: 'foo',
store: new MongoStore(options)
}));
LS正解
在 Express 4 中,express
框架的内部中间件已经被分离出来,并且需要单独安装。因此你需要使用 express-session
和 connect-mongo
来实现会话存储。以下是具体的步骤和示例代码:
首先,确保你已经安装了所需的包:
npm install express express-session connect-mongo --save
接下来,在你的应用文件中,你可以这样配置 express-session
和 connect-mongo
:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const settings = require('./settings');
const app = express();
// 配置 session 中间件
app.use(session({
secret: settings.cookieSecret, // 用于签名 cookie 的密钥
key: 'express.sid', // 默认情况下 cookie 的名称
resave: false,
saveUninitialized: true,
store: new MongoStore({ // 使用 MongoDB 存储 session 数据
url: settings.db // MongoDB 连接字符串
})
}));
// 其他路由和中间件
在这段代码中:
secret
是一个用来对 session cookie 签名的密钥。key
定义了存储在 cookie 中的键值名称。resave
控制是否每次请求都重新保存 session。saveUninitialized
控制未初始化的 session 是否保存到存储中。store
是一个MongoStore
实例,用于将 session 数据存储在 MongoDB 中。
最后,确保 settings.js
文件中包含了正确的数据库连接字符串和其他必要的设置。
通过这种方式,你可以成功地在 Express 4 中使用 connect-mongo
来存储 session 数据。