User.findOne()始终抛出错误无法读取属性' _id'未定义的 - NodeJS

时间:2016-12-22 06:50:48

标签: node.js mongodb mongoose passport.js passport-local

这是我的 Passport

的中间件
passport.use('local-login', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
}, function (req, email, password, done) {
User.findOne({ email: email}, function (err, user) {
    if (err) return done(err);

    if(!user) {
        return done(null, false, req.flash('loginMessage', 'No user    found!'));
    }

    if (!user.comparePassword(password)) {
        return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
    }

    return done(null, user);
});
}));

这是我的登录POST方法

router.post('/login', passport.authenticate('local-login', {
    successRedirect: '/profile',
    failureRedirect: '/login',
    failureFlash: true
}));

之后,我尝试重定向到GET个人资料页面:

router.get('/profile', function (req, res, next) {
    User.findOne({'user._id': req.user._id}, function (err, user) {
        if (err) return next(err);

        res.render('accounts/profile', { user : user});
    });
});

正确唤醒注册方法并将数据发送到数据库,但它也有错误重定向到具有相同TypeError的Profile页面!

最后,这是package.json

中的依赖项
"dependencies": {
"bcrypt-nodejs": "0.0.3",
"body-parser": "^1.15.2",
"connect-mongo": "^1.3.2",
"cookie-parser": "^1.4.3",
"ejs": "^2.5.5",
"ejs-mate": "^2.3.0",
"express": "^4.14.0",
"express-flash": "0.0.2",
"express-session": "^1.14.2",
"mongoose": "^4.7.4",
"morgan": "^1.7.0",
"passport": "^0.3.2",
"passport-local": "^1.0.0"
}

我希望有人帮助我,我被困在这里!我无法继续前进。

3 个答案:

答案 0 :(得分:1)

这里你试图直接从req对象访问user_id。

User.findOne({'user._id': req.user._id},

将其更改为

router.post('/profile', function (req, res, next) {
User.findOne({'user._id': req.body.user._id}, function (err, user) {
    if (err) return next(err);

    res.render('accounts/profile', { user : user});
});

});

您无法在GET请求的正文中发送数据。因此,将其更改为POST,然后如果您尚未声明bodysarser中间件,则首先声明它,然后您的请求中的POST请求中的数据将可用。

答案 1 :(得分:1)

docs开始,按照代码

序列化和反序列化用户与会话的使用
getImageURI()

答案 2 :(得分:0)

最后,我通过降级 package.json 文件中的某些依赖项来解决了我的错误 依赖关系将如此:

  "dependencies": {
"bcrypt-nodejs": "0.0.3",
"body-parser": "^1.14.2",
"connect-mongo": "^1.1.0",
"cookie-parser": "^1.4.0",
"ejs": "^2.3.4",
"ejs-mate": "^2.3.0",
"express": "^4.13.3",
"express-flash": "0.0.2",
"express-session": "^1.12.1",
"mongoose": "^4.3.4",
"morgan": "^1.6.1",
"passport": "^0.3.2",
"passport-local": "^1.0.0"
}

然后一切正常,至少在我的情况下:) 谢谢大家。