2017-04-26 44 views
1

我在本教程「快速原型Web應用程序教程與nodejs和mongodb」(safaribooksonline)與我的第一次冒險nodejs和mongodb。快速原型Web應用程序教程與nodejs和mongodb,代碼問題?

錯誤發生時,我嘗試登錄,它應該創建與第一次登錄嘗試登錄項,但下面的錯誤出現:

**TypeError: Cannot read property 'collection' of null 
at processLogin (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/server/controller.js:45:4)** 
at Layer.handle [as handle_request] (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/layer.js:95:5) 
at next (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/route.js:137:13) 
at Route.dispatch (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/route.js:112:3) 
at Layer.handle [as handle_request] (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/layer.js:95:5) 
at /Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/index.js:281:22 
at Function.process_params (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/index.js:335:12) 
at next (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/index.js:275:10) 
at Function.handle (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/index.js:174:3) 
at router (/Users/brunofl/Documents/_webdev/rapid-prototypingWebApp/movieQ_start/node_modules/express/lib/router/index.js:47:12) 

本教程有GIT其代碼:https://github.com/shorttompkins/movieq.git

我的代碼或GIT代碼似乎都不起作用。

我controller.js文件:

var client = require('./mongo_client'), 
request = require('request'); 

module.exports = { //boilerplated endpoints 
index: function (req, res) { 
    if (!req.session.userId) { 
     res.redirect('/login'); 
    } else { 
     var filter = { // filters not watched movies 
       'userId': req.session.userId, 
       'watched': false 
      }, 
      options = { //sorts by the descending release date order 
       sort: [['release_date', 1]] 
      }; 
     //starts using the mongoDB using '.db()' function that returns the connection 
     //when you make a reference to collection or DB even if it doesn't exist mongoDB creates it for you 
     client.db().collection('movies') //selects the collection 
      .find(filter, {}, options) //filters inside the collection 
      .toArray(function (err, movies) { 
       if (err) { 
        throw err; 
       } 
       res.render('index', { 
        'pageTitle': 'My Movies!!', 
        'movies': movies 
       }); 
      }); 
    } 
}, 
showLogin: function (req, res) { 
    res.render('login'); 
}, 

processLogin: function (req, res) { 
    // defines user objetc 
    var userObj = { 
     email: req.body.email, //because bodyParser npm package is used as middleware 
     password: req.body.password 
    }; 

    client 
     .db() 
     .collection('users') //find user on users collection 
     .find(userObj, {}, {}) 
     .toArray(function (err, users) { 
      if (users.length === 0) { 
       client 
        .db() 
        .collection('users') 
        .insert(userObj, function (err, users) {//insert user as it was already registered 
         req.session.userId = users[0]._id; //associate user with id 
         res.redirect('/'); 
        }); 
      } else { 
       req.session.userId = users[0]._id; 
       res.redirect('/'); 
      } 
     }); 
},(...) 

以下NPM包使用: NPM安裝--save表達表達會話reqandlebars MongoDB的摩根cookie的解析器體解析器方法重寫的強調

回答

0

好,僅供參考我的問題得到了解決:採取

操作: 要我需要運行的mongod --dbpath /路/

開始的MongoDB

由於processLogin函數中的以下controller.js行中的問題,應用程序未登錄: 「req.session.userId = users [0] ._ id;」 我確實將其更改爲: req.session.userId = users._id; 並完成應用程序開始工作。