Nodejs実戦双色(by趙坤など)第一章Express+MongoDB構築ブログの誤り

4717 ワード

先日『nodejs実戦』という本を買いましたが、本の中で紹介されている記号の間違いなどは言いませんでした.
第一章では、今まで私が踏んだ穴は…
1.page 30 
チュートリアルによると、左側のナビゲーションロゴの欄をクリックすると、次のエラーが…
ReferenceErrer:/Users/apple/Dockments/exercise/node/blog/views/logine.ejs:14    12|    13|user is not defined    at eval(eval at(/Users/apple/Dockments/exercise/node/blog/nodemoodules/ejs/lib/ejs.js:464:12)、:15:12    at eval(eval at(/Users/apple/Dockments/exercise/node/blog/nodemoodules/ejs/lib/ejs.js:464:12)、:40:9    at returnedFn(/Users/apple/Dockments/exercise/node/blog/nodemumodules/ejs/lib/ejs/ejs.js:493:17)    at View.exports.rendefile[as engine](/Users/apple/Dockments/exercise/node/blog/nodemoodules/ejs/lib/ejs.js:350:31)    at View.render(/Users/apple/Dockments/exercise/node/blog/nodeumodules/express/lib/view.js:126:8)    at tryRender(/Users/apple/Dcuments/exercise/node/blog/nodemoodules/express/lib/appliation.js:639:10)    at EventEmitter.render(/Users/apple/Dockments/exercise/node/blog/nodemoodules/express/lib/appliation.js:591:3)    at ServerResonse.render(/Users/apple/Dockments/exercise/node/blog/nodemoodules/express/lib/reponse.js:961:7)    at/Users/apple/Dockments/exercise/node/blog/routes/index.js:66:9    at Layer.handle[as handlegurequest](/Users/apple/Doccuments/exercise/node/blog/nodemoodules/express/lib/router/layer.js:95)GET/login 500 9.732 ms-1467
ビルの主人は長い間考えました.原因はindex.jsの中にあります.エラーを報告したuser is not defined(その後のsuccess、error未定義エラーを含む)は、ejsテンプレートのuser(またはsuccess、error)がres.render()に定義されていないことを説明します.だから、ap.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の中でap.get('/login')が対応する部分を変えることを注意することを忘れたためです.
2.page 31
ログインとログイン応答…コードは最初にパスワードを生成するmd 5の値があります.本の通りにコード化します.ログイン時にパスワードが間違っています.ビルの主人はコンソールで印刷して見にきました.
//        
if (user.password != password) {
    req.flash('error', '    !');
    return res.redirect('/login');
}
ここの問題はもちろん入力されたパスワードとデータベースの中に保存されているものとは違います.本のソースコードは間違っています.
var md5 = crypto.createHash('md5'),
    password = md5.update(req.body.password).digest('hex');  
ここでmd 5を生成するのは何の役にも立たないです.比較するのはユーザ登録時に入力されたパスワードとデータベースに保存されているパスワードです.
var password = req.body.password;
後は正常に運行します.
新しいタイプのnodejsとして、いつも様々な低レベルの敷居に手を伸ばします.これからもっと強くなりたいです.自分で独立して問題を解決できます.
私が踏んだ穴を探し続けます.見つけたらまた書きます.