前两天买了《nodejs实战》这本书,书里推荐的一些符号错误啥的就不说了 = =;
论第一章目前为止我踩过的坑...
1.page 30
根据教程来之后,点击左侧的导航login那一栏后会跳出下面的错误...
ReferenceError: /Users/apple/Documents/exercise/node/blog/views/login.ejs:14
12| </form>
13| <%- include footer %>
user is not defined
at eval (eval at <anonymous> (/Users/apple/Documents/exercise/node/blog/node_modules/ejs/lib/ejs.js:464:12), <anonymous>:15:12)
at eval (eval at <anonymous> (/Users/apple/Documents/exercise/node/blog/node_modules/ejs/lib/ejs.js:464:12), <anonymous>: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新手 (屁都不懂),老是卡在各种低级门槛伸手党 = = 。。希望以后越来越壮自己能独立解决问题
继续搜集我踩的坑,有发现又写上!