2017-04-26 5 views
1

私はこのチュートリアルの "nodejsとmongodbを使ったラピッドプロトタイピングWebアプリケーションのチュートリアル"(safaribooksonline)のnodejsとmongodbの最初の冒険に参加しています。Rapid Prototyping 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のモルガン・クッキー・パーサボディパーサーメソッドのオーバーライドは

答えて

0
を強調する表現インストール

まあ、あくまでも参考のために私は問題が解決しました:取ら

アクション: を私はのmongod --dbpath /パス/

を実行するために必要なのMongoDBを開始するには

processLogin関数内の次のcontroller.js行に問題があるため、アプリケーションがログに記録されませんでした: "req.session.userId = users [0] ._ id;" 私はそれを次のように変更しました: req.session.userId = users._id; アプリが動作し始めた。

関連する問題