feng xiaohan

connect-flash

跨请求存储数据,需要一个 session。但如果不想将错误信息永久存储在 session 中,而是想在错误信息中添加一些别的信息,将其快速发送到 session 中。一旦我们使用了这个在 session 中的错误信息,这个错误信息将会从 session 中删除,这样对于后面的请求,session 中将不会存在这个错误信息。

flash 是在 session 中用于储存信息的特殊区域,在其中存储的值使用过一次便被清空。我们将消息入到 flash 中,跳转目标页中显示该消息。它常和redirect一起使用,用于一次性消息提示。

下载

npm install --save connect-flash

引入注册

app.js

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

const app = express();
app.use(flash());
...

将信息存入 flash 中

通过req.flash('name', 'value')来向 falsh 中存入一条信息:

exports.postLogin = (req, res, next) => {
  const email = req.body.email;
  const password = req.body.password;
  User.findOne({ email: email })
    .then((user) => {
      if (!user) {
        req.flash("error", "Invalid email or password");
        return res.redirect("/login");
      }
    })
    .catch((err) => console.log(err));
};

获取 falsh 中的信息

通过req.flash('name')来获取设置的信息,并将它发送到页面:

exports.getLogin = (req, res, next) => {
  let message = req.flash("error"); // 获取flash中存入的信息
  if (message.length > 0) {
    message = message[0];
  } else {
    message = null;
  }
  res.render("auth/login", {
    path: "/login",
    pageTitle: "Login",
    errorMessage: message, // 发送到页面中
  });
};