Nodejs express4.x connect-flash出错
Nodejs express4.x connect-flash出错
var flash = require(‘connect-flash’); app.use(flash());
引用时出现下面问题。新手求指点。 req.flash() requires sessions
undefined
Error: req.flash() requires sessions at Error (<anonymous>) at IncomingMessage._flash [as flash] (D:\MyDevelop\express_test\blogs\node_modules\connect-flash\lib\flash.js:60:41) at D:\MyDevelop\express_test\blogs\routes\index.js:23:9 at Layer.handle [as handle_request] (D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\layer.js:76:5) at next (D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\route.js:100:13) at Route.dispatch (D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\route.js:81:3) at Layer.handle [as handle_request] (D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\layer.js:76:5) at D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\index.js:234:24 at Function.proto.process_params (D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\index.js:312:12) at D:\MyDevelop\express_test\blogs\node_modules\express\lib\router\index.js:228:12
Nodejs express4.x connect-flash出错
在使用Express 4.x和connect-flash
模块时,如果你遇到了req.flash() requires sessions
的错误信息,这通常是因为你没有正确配置会话(session)中间件。connect-flash
依赖于会话来存储临时消息。
解决方法:
-
安装必要的依赖包: 确保你已经安装了
express
、connect-flash
以及express-session
(用于会话管理)。npm install express connect-flash express-session
-
配置会话中间件: 在你的应用中添加
express-session
中间件,并确保它在connect-flash
之前被调用。示例代码:
const express = require('express'); const session = require('express-session'); const flash = require('connect-flash'); const app = express(); // 配置会话中间件 app.use(session({ secret: 'your_secret_key', // 用于加密会话数据的密钥 resave: false, saveUninitialized: true })); // 使用connect-flash中间件 app.use(flash()); // 示例路由,用于设置和获取闪现消息 app.get('/', (req, res) => { // 设置闪现消息 req.flash('info', 'Hello, this is a flash message!'); res.send('Check your console for the flash message.'); }); app.get('/show', (req, res) => { // 获取闪现消息 const messages = req.flash(); console.log(messages); // 输出: { info: [ 'Hello, this is a flash message!' ] } res.send('Flash messages displayed in console.'); }); app.listen(3000, () => { console.log('Server running on port 3000'); });
关键点解释:
secret
: 这是一个用于加密会话数据的密钥。确保该值安全且唯一。resave
: 如果为false
,则不会重新保存未修改的会话。saveUninitialized
: 如果为true
,则会保存未初始化的会话(即尚未设置任何属性的会话)。
通过以上步骤,你应该能够解决req.flash() requires sessions
的错误。确保在使用connect-flash
之前已经配置了express-session
中间件。
在 flash 中间件之前挂个 session 中间件:https://github.com/expressjs/session
楼主你好,我也遇上了这个问题,问一下你解决了吗?如何解决?
flash里的信息需要存储在session里,所以需要session(express4.x分离了中间件,以前是express-session)这个中间件
上图为加入flash前后的数据库
加入以下代码就好啦,我用的是express创建的项目。数据库用的是mongo
var session = require(‘express-session’);
var MongoStore = require(‘connect-mongo’)(session);
app.use(session({
secret: ‘keyboard cat’,
//saveUninitialized: false, // don’t create session until something stored
//resave: false, //don’t save session if unmodified
store: new MongoStore({
url: ‘mongodb://localhost/session’,
autoRemove: ‘interval’,
autoRemoveInterval: 10 // In minutes. Default
}),
cookie: { maxAge: 900000 } // expire session in 15 min or 900 seconds
}));
最后:同是新手,不对的地方望能指正。
需要到这种的,一般都可以使用ajax交换比较好
这里有一个关于 connect-flash 简单的例子,你可以看看,应该可以解决你的疑惑!《connect-flash 用法详解》
根据你提供的信息,错误提示 req.flash() requires sessions
表明你在使用 connect-flash
之前没有启用会话(session)。connect-flash
需要在会话管理中间件之后使用。
下面是解决这个问题的具体步骤和示例代码:
步骤
-
确保已经安装了
express
,connect-flash
和express-session
:npm install express connect-flash express-session
-
在应用初始化时启用会话管理:
const express = require('express'); const session = require('express-session'); const flash = require('connect-flash'); const app = express(); // 启用会话 app.use(session({ secret: 'your_secret_key', resave: false, saveUninitialized: true })); // 启用 flash app.use(flash());
-
在路由中使用
req.flash()
:app.get('/', (req, res) => { // 设置闪现消息 req.flash('info', '这是一个闪现消息'); res.send('Flash 消息已设置'); }); app.get('/showFlash', (req, res) => { // 显示闪现消息 const info = req.flash('info'); res.send(info.join('<br>')); });
示例代码
完整的示例代码如下:
const express = require('express');
const session = require('express-session');
const flash = require('connect-flash');
const app = express();
// 启用会话
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: true
}));
// 启用 flash
app.use(flash());
app.get('/', (req, res) => {
// 设置闪现消息
req.flash('info', '这是一个闪现消息');
res.send('Flash 消息已设置');
});
app.get('/showFlash', (req, res) => {
// 显示闪现消息
const info = req.flash('info');
res.send(info.join('<br>'));
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
通过以上步骤和代码,你可以正确地在 Express 4.x 中使用 connect-flash
来显示闪现消息。