这本书中关于开发微博小功能所用到的 web 开发框架是 express 2.x,而我在练习代码的时候安装的是 express.3.x,所以里面的视图助手 app.dynamicHelpers() 方法和 req.flash() 都被移除,百度了一下对于试图助手可以使用 res.locals.xxx 代替,flash 方法的问题可以安装 connect-flash 插件解决。本社区一哥们给出一段代码所加在 app.js 中其它文件都不用改,代码如下:
var flash = require('connect-flash');
app.use(flash());
app.use(function(req, res, next){
res.locals.user = req.session.user;
var err = req.flash('error');
if(err.length)
res.locals.error = err;
else
res.locals.error = null;
var succ = req.flash('success');
if(succ.length)
res.locals.success = succ;
else
res.locals.success = null;
next();
});
这样服务器可以跑起来,但是打开页面的时候报错 user not defined 错误,我很纳闷,百思不得其解,刚接触 Node.js 所以请各位多多指教啊,下面贴一下相关文件的代码供你们参考,希望能把解了这个疑惑....3Q。。
layout.ejs 中关键代码如下:
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/">Microblog</a>
<div class="nav-collapse">
<ul class="nav">
<li class="active"><a href="/">首页</a></li>
<% if(!user){ %>
<li><a href="/login">登陆</a></li>
<li><a href="/reg">注册</a></li>
<% }else{ %>
<li><a href="/logout">登出</a></li>
<% } %>
</ul>
</div>
</div> </div> </div>
<div id="container" class="container-fluid">
<% if (success) { %>
<div class="alert alert-success"> <%=success %> </div>
<% } %>
<% if (error) { %>
<div class="alert alert-error"> <%=error %> </div>
<% } %>
<%- body %>
routes/index.js 中关键代码如下:
app.post('/login',function(req, res){
var password = md5.update(req.body.password).digest('base64');
User.get(req.body.username, function(err, user) {
if (!user) {
req.flush("error",'用户不存在');
return res.redirect('/login');
}
if (user.password != password) {
req.flush("error",'用户口令错误');
return res.redirect('/login');
}
req.session.user = user;
req.flush("success",'登入成功');
res.redirect('/');
});
});
app.get('/logout',function(req, res){
req.session.user = null;
req.flush("success",'登出成功');
res.redirect('/');
});