【问题标题】:Rapid Prototyping Web Application tutorial with nodejs and mongodb, code issue?使用 nodejs 和 mongodb 的快速原型设计 Web 应用程序教程,代码问题?
【发布时间】:2017-04-26 22:08:46
【问题描述】:

我在本教程“使用 nodejs 和 mongodb 的快速原型设计 Web 应用程序教程”(safaribooksonline)中第一次使用 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 install --save express express-session reqandlebars mongodb morgan cookie-parser body-parser method-override underscore

【问题讨论】:

    标签: node.js mongodb authentication


    【解决方案1】:

    好吧,仅供参考,我的问题已解决:

    采取的措施: 要启动 mongodb,我需要运行 mongod --dbpath /path/

    由于 processLogin 函数中的以下 controller.js 行存在问题,应用程序未登录: “req.session.userId = users[0]._id;” 我确实将其更改为: req.session.userId = users._id; 并且完成了应用程序开始工作。

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2018-01-31
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多