Nodejs Object #<IncomingMessage> has no method 'flash'
Nodejs Object #<IncomingMessage> has no method 'flash’
比如表单提交后想给用户一个提示,然后再跳转到一个页面 用网上的例子
req.flash('info', 'join success')
res.redirect('/mixin', {reg_msg:'username'});
这样提示,Object #<IncomingMessage> has no method 'flash’
网上搜索了一下好象是express3不能用req.flash https://github.com/visionmedia/express/issues/1170 那要用户一个提示,一般是怎么处理呢?
标题:Node.js 中 Object #<IncomingMessage> has no method 'flash'
错误
内容:
当你尝试在 Node.js 应用程序中使用 req.flash('info', 'join success')
这样的代码时,可能会遇到错误信息 Object #<IncomingMessage> has no method 'flash'
。这是因为 req.flash
方法并不是 Node.js 原生的一部分,而是在 Express 3.x 版本之后被移除的。如果你正在使用的是较新的版本(如 Express 4 或更高),你需要使用其他方法来实现相同的功能。
如何处理用户提示?
一种常见的处理方式是使用会话(session)或者直接在响应对象(res
)中存储消息,并在前端通过 JavaScript 来读取这些消息并显示出来。这里我将展示如何使用会话来实现这一功能。
示例代码:
首先确保你已经安装了 express-session
和 connect-flash
模块。如果没有安装,可以通过以下命令安装:
npm install express-session connect-flash --save
然后,在你的 Express 应用程序中设置中间件:
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
}));
// 设置闪现消息中间件
app.use(flash());
// 路由处理
app.post('/submit-form', (req, res) => {
// 存储闪现消息
req.flash('success', 'Join successful!');
res.redirect('/mixin');
});
app.get('/mixin', (req, res) => {
// 获取闪现消息并在视图中渲染
const successMessages = req.flash('success');
res.render('mixin', { messages: successMessages });
});
在这个例子中,我们使用了 connect-flash
库来处理闪现消息。当用户提交表单时,我们使用 req.flash('success', 'Join successful!')
存储一条成功消息。然后重定向到 /mixin
页面。在 /mixin
页面上,我们获取并显示这条消息。
视图模板示例(使用 EJS)
假设你使用的是 EJS 作为模板引擎,你可以这样写:
<!-- mixin.ejs -->
<!DOCTYPE html>
<html>
<head>
<title>Mixin Page</title>
</head>
<body>
<% if (messages.length > 0) { %>
<div>
<% messages.forEach(function(message) { %>
<p><%= message %></p>
<% }); %>
</div>
<% } %>
<!-- 其他内容 -->
</body>
</html>
这样,当用户访问 /mixin
页面时,他们将看到之前保存的消息。
通过这种方式,你可以避免使用已废弃的方法,并且能够有效地向用户提供反馈信息。
npm install connect-flash
这个安装了
flash方法不推荐使用,请将消息放到res中返回
试着将这两行代码放一起,放在session模块之后,这两个又放在其它模块之前 var flash = require(‘connect-flash’); app.use(flash());
nice
你遇到的错误是因为 req.flash
方法在 Express 4 及以上版本中已被移除。Express 4 将闪现消息(flash messages)的逻辑分离到了一个独立的中间件 connect-flash
中。
你可以通过安装并使用 connect-flash
来实现闪现消息的功能。以下是具体步骤和示例代码:
安装依赖
首先,你需要安装 connect-flash
:
npm install connect-flash
示例代码
然后,在你的 Express 应用中引入并使用 connect-flash
:
const express = require('express');
const flash = require('connect-flash');
const session = require('express-session');
const app = express();
// 使用session中间件
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: true
}));
// 使用connect-flash中间件
app.use(flash());
// 示例路由:表单提交后的处理
app.post('/submit-form', (req, res) => {
req.flash('info', 'join success');
res.redirect('/mixin');
});
// 在视图模板中获取并显示闪现消息
app.get('/mixin', (req, res) => {
const infoMessages = req.flash('info');
res.render('mixin', { reg_msg: 'username', infoMessages });
});
视图模板中的展示
在你的视图模板(例如 EJS)中,可以这样展示闪现消息:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mixin Page</title>
</head>
<body>
<% if (infoMessages.length) { %>
<div class="alert alert-info">
<% infoMessages.forEach(function(message) { %>
<%= message %>
<% }); %>
</div>
<% } %>
<!-- 其他内容 -->
</body>
</html>
解释
- 安装:安装
connect-flash
和express-session
。 - 使用中间件:使用
express-session
和connect-flash
中间件。 - 存储消息:在表单提交后,使用
req.flash('info', 'message')
存储闪现消息。 - 获取并展示消息:在目标页面中获取并展示这些消息。
这样,你就可以在表单提交后给用户一个提示,并且在重定向到另一个页面时展示该提示。