Nodejs实战双色(by赵坤等...)第一章Express+MongoDB搭建博客的一些错误

前两天买了《nodejs实战》这本书,书里推荐的一些符号错误啥的就不说了 = =;

论第一章目前为止我踩过的坑...


1.page 30 

根据教程来之后,点击左侧的导航login那一栏后会跳出下面的错误...

ReferenceError: /Users/apple/Documents/exercise/node/blog/views/login.ejs:14
    12|
    13| <%- include footer %>

user is not defined
    at eval (eval at (/Users/apple/Documents/exercise/node/blog/node_modules/ejs/lib/ejs.js:464:12), :15:12)
    at eval (eval at (/Users/apple/Documents/exercise/node/blog/node_modules/ejs/lib/ejs.js:464:12), :40:9)
    at returnedFn (/Users/apple/Documents/exercise/node/blog/node_modules/ejs/lib/ejs.js:493:17)
    at View.exports.renderFile [as engine] (/Users/apple/Documents/exercise/node/blog/node_modules/ejs/lib/ejs.js:350:31)
    at View.render (/Users/apple/Documents/exercise/node/blog/node_modules/express/lib/view.js:126:8)
    at tryRender (/Users/apple/Documents/exercise/node/blog/node_modules/express/lib/application.js:639:10)
    at EventEmitter.render (/Users/apple/Documents/exercise/node/blog/node_modules/express/lib/application.js:591:3)
    at ServerResponse.render (/Users/apple/Documents/exercise/node/blog/node_modules/express/lib/response.js:961:7)
    at /Users/apple/Documents/exercise/node/blog/routes/index.js:66:9
    at Layer.handle [as handle_request] (/Users/apple/Documents/exercise/node/blog/node_modules/express/lib/router/layer.js:95:5)
GET /login 500 9.732 ms - 1467



楼主琢磨半天,原因在index.js中 。报错user is not defined (包括之后的success、error未定义错误),说明在ejs模板中的user(或者success、error)在res.render()中没有被定义,所以app.get('/login',function(..))里面要定义一遍,内容改为如下:

app.get('/login',function (req, res) {
  res.render('login', {
      title: '登陆',
      user: req.session.user,
      success: req.flash('success').toString(),
      error: req.flash('error').toString()
  });
});
这就是访问/login时报错的原因,因为书上源码中忘提醒在index.js中app.get('/login')改对应的部分了;




2.page31

登录和登出响应...代码开始有一段生成密码的md5值,照着书来编码,在登录的时候一直出现密码错误(实际上没错)的提示;楼主在控制台打印来看了发现是

//检查密码是否一致
if (user.password != password) {
    req.flash('error', '密码错误!');
    return res.redirect('/login');
}
这儿的问题,当然是输入的密码和数据库里面存的不同啦。其实书上错了,书上的源码是

var md5 = crypto.createHash('md5'),
    password = md5.update(req.body.password).digest('hex');  
这儿生成md5并没有什么用,它要比较的是用户登录时输入的密码和数据库中存的密码,所以应该是:

var password = req.body.password;

后面运行就正常啦!






作为一个nodejs新手 (屁都不懂),老是卡在各种低级门槛伸手党 = = 。。希望以后越来越壮自己能独立解决问题

继续搜集我踩的坑,有发现又写上!


你可能感兴趣的:(NodeJs)