Nodejs express flash问题

Nodejs express flash问题

express3.0没有的flash方法,我用session来存放错误信息,想知道怎么取一次后删除错误信息.求教

4 回复

Node.js Express Flash 问题

在使用 Express 3.0 时,flash 方法并不是内置的。不过,你可以通过使用 connect-flash 中间件来实现类似的功能。connect-flash 可以帮助你在会话中存储临时消息,并且在读取后自动清除这些消息。

示例代码

首先,你需要安装 connect-flashexpress-session

npm install express-session connect-flash

然后,在你的 Express 应用中配置这两个中间件:

const express = require('express');
const session = require('express-session');
const flash = require('connect-flash');

const app = express();

// 配置 session 中间件
app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: true
}));

// 使用 flash 中间件
app.use(flash());

// 设置模板引擎(例如 EJS)
app.set('view engine', 'ejs');

// 示例路由
app.get('/login', (req, res) => {
  // 假设登录失败
  req.flash('error', '用户名或密码错误');
  res.redirect('/login');
});

app.post('/login', (req, res) => {
  // 检查用户凭据
  const isValid = true; // 假设验证成功

  if (!isValid) {
    req.flash('error', '用户名或密码错误');
    res.redirect('/login');
  } else {
    res.send('登录成功');
  }
});

// 渲染带有闪现消息的页面
app.get('/', (req, res) => {
  res.render('index', { error: req.flash('error') });
});

解释

  1. 安装依赖

    • express-session:用于管理会话。
    • connect-flash:用于存储临时消息。
  2. 配置中间件

    • session 中间件用于设置会话相关的配置。
    • flash 中间件用于处理闪现消息。
  3. 设置模板引擎

    • 这里使用了 EJS 作为模板引擎,但你也可以选择其他模板引擎。
  4. 路由示例

    • /login GET 路由:当用户尝试登录失败时,将错误信息存入会话并重定向到登录页面。
    • /login POST 路由:处理登录表单提交,验证用户凭据,如果失败则存储错误信息并重定向。
    • / GET 路由:渲染主页,并从会话中取出闪现消息显示给用户。
  5. 闪现消息

    • req.flash('error', '用户名或密码错误'):将错误信息存储到会话中。
    • res.render('index', { error: req.flash('error') }):在渲染模板时,从会话中取出闪现消息并传递给视图。

这样,每次访问包含闪现消息的页面时,这些消息都会被自动删除,确保它们只显示一次。


谢谢 ~~

对于Express 3.x版本,flash 方法确实不存在。你可以使用 req.session 来存储错误信息,并且在取出之后手动删除这些信息。

示例代码

const express = require('express');
const session = require('express-session');

const app = express();
app.use(session({
    secret: 'your-secret-key',
    resave: false,
    saveUninitialized: true
}));

// 存储错误信息
app.post('/submit', (req, res) => {
    // 假设验证失败
    req.session.error = '表单提交失败';
    res.redirect('/'); 
});

// 取出并显示错误信息
app.get('/', (req, res) => {
    let error = req.session.error;
    if (error) {
        // 在此处处理错误信息(例如,传递给模板引擎)
        delete req.session.error; // 删除错误信息
    }
    res.send(`
        <h1>首页</h1>
        ${error ? `<div>${error}</div>` : ''}
    `);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 安装中间件

    • 使用 express-session 中间件来管理会话。
  2. 存储错误信息

    • 当表单提交失败时,在 req.session 中存储一个错误信息。
    • 然后重定向到首页。
  3. 取出并删除错误信息

    • 在首页路由中,检查 req.session.error 是否存在。
    • 如果存在,将其显示出来,并通过 delete 操作符从 req.session 中删除该错误信息。

这样可以确保每次只显示一次错误信息。

回到顶部