BHe*_*cks 40 javascript session node.js express
因此,我的Web应用程序需要身份验证,并且我有一个注册页面,如果此人尝试使用已存在于数据库中的电子邮件进行注册,我想向他们显示错误消息.我试图在html端使用此代码执行此操作:
<% if (message.length > 0) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
并在我的路线中这样做:
router.get('/signup', function(req, res) {
res.render('/signup', { message: req.flash('signupMessage') });
});
Run Code Online (Sandbox Code Playgroud)
我已尝试使用以下内容设置配置:
app.configure(function() {
app.use(express.session({ secret : 'keyboard cat' }));
});
Run Code Online (Sandbox Code Playgroud)
但这给了我一个TypeError:
12:11:38 web.1 | app.configure(function() {
12:11:38 web.1 | ^
12:11:38 web.1 | TypeError: Object function (req, res, next) {
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,因为我知道我需要会话才能让flash工作,但是会话对我来说似乎没有用.我也尝试过使用req.session.messages只使用会话而不使用flash,但由于我没有使用会话这显然不起作用.
任何见解?我正在使用Express 4.0.0谢谢
Tha*_*hip 76
这个要点应该回答你的问题:
https://gist.github.com/raddeus/11061808
在您的应用程序设置文件中
app.use(flash());
Run Code Online (Sandbox Code Playgroud)
在设置会话和cookie解析器之后立即放置.这真的是你需要使用闪存.
您正在使用:
req.flash('signupMessage', anyValue);
Run Code Online (Sandbox Code Playgroud)
在重定向到/注册之前对吗?
这是一个有趣的小花絮,我目前用于个人网站(在我的主应用程序文件中):
app.use(function(req, res, next){
res.locals.success_messages = req.flash('success_messages');
res.locals.error_messages = req.flash('error_messages');
next();
});
Run Code Online (Sandbox Code Playgroud)
现在,每个视图都可以访问您闪存的任何错误或成功消息.对我来说效果很好.
最后一件事(这是挑剔的,但你可能会获得一些知识).如果你改变:
<% if (message.length > 0) { %>
Run Code Online (Sandbox Code Playgroud)
至:
<% if (message) { %>
Run Code Online (Sandbox Code Playgroud)
它将以相同的方式工作,但如果消息未定义则不会失败.未定义和空字符串在javascript中都被视为"虚假"值.
编辑:我的cookie /会话/闪存设置如下:
app.use(cookieParser('secretString'));
app.use(session({cookie: { maxAge: 60000 }}));
app.use(flash());
Run Code Online (Sandbox Code Playgroud)
也许看到您的应用程序设置代码会有所帮 另请注意,在Express 4中不再需要使用app.configure.
最终编辑:https://gist.github.com/raddeus/11061808
这是一个有效的例子.运行该应用程序后转到localhost:3000,您应该['it worked']在屏幕上看到.
Poi*_*Oak 21
https://gist.github.com/brianmacarthur/a4e3e0093d368aa8e423
我也开始对Express 4中的flash消息感到困惑.我的困惑部分来自于flash消息的概念,模板可用的临时消息和flash消息的各种实现之间的区别,其中包括express-flash其他模块和自定义中间件.
为了扩展上面Thad Blankenship的出色响应,我为初学者创建了一个Gist,其中包括两种闪存消息方法 - express-flash模块和自定义中间件 - 用玉器,ejs或把手呈现.
该自述包括有关细节getter-- req.flash(type)--and setter-- req.flash(type, message)--methods被暴露express-flash,以及他们如何从开采不同res.locals,并req.session通过公开的对象express-session自定义的中间件.
小智 6
要显示Flash消息,您必须使用cmd在项目中安装Flash模块。
npm install express-session --save
npm install cookie-parser --save
npm install connect-flash --save
Run Code Online (Sandbox Code Playgroud)
现在,您必须向app.js文件中添加一些代码才能访问这些模块。让我们添加这些代码。
var session = require('express-session');
var cookieParser = require('cookie-parser');
var flash = require('connect-flash');
var app = express();
app.use(cookieParser('secret'));
app.use(session({cookie: { maxAge: 60000 }}));
app.use(flash());
Run Code Online (Sandbox Code Playgroud)
现在生成即时消息
req.flash('success', 'Registration successfully');
res.locals.message = req.flash();
Run Code Online (Sandbox Code Playgroud)
要在视图文件中显示Flash消息,请使用代码
<% if(locals.message){ %>
<div class="alert alert-success" role="alert">
<strong>Well done!</strong> <%=message.success%>
</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72432 次 |
| 最近记录: |