私はこのチュートリアルの "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のモルガン・クッキー・パーサボディパーサーメソッドのオーバーライドは