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


7 回复

Nodejs express4.x connect-flash出错

在使用Express 4.x和connect-flash模块时,如果你遇到了req.flash() requires sessions的错误信息,这通常是因为你没有正确配置会话(session)中间件。connect-flash依赖于会话来存储临时消息。

解决方法:

  1. 安装必要的依赖包: 确保你已经安装了expressconnect-flash以及express-session(用于会话管理)。

    npm install express connect-flash express-session
    
  2. 配置会话中间件: 在你的应用中添加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)这个中间件 QQ图片20150913115033.png 上图为加入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 需要在会话管理中间件之后使用。

下面是解决这个问题的具体步骤和示例代码:

步骤

  1. 确保已经安装了 express, connect-flashexpress-session

    npm install express connect-flash express-session
    
  2. 在应用初始化时启用会话管理:

    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());
    
  3. 在路由中使用 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 来显示闪现消息。

回到顶部