2017-04-26 51 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; 并完成应用程序开始工作。