现有属性返回undefined

时间:2016-02-22 20:41:06

标签: javascript node.js mongodb express undefined

我开始使用node.js,express和mongodb来实现RESTful API。一切顺利到现在为止,我有一条路由来验证用户如下:

apiRoutes.post('/authenticate', function(req, res) {
    User.findOne({
        nickname: req.body.nickname
    }, function(err, user) {

        if (err) throw err;

        if (!user) {
            res.json({
                success: false,
                message: 'Authentication failed. User not found.'
            });
        } else if (user) {
            console.log(user);
            console.log(user.nickname);
            console.log(user.email);
            console.log(user.password);
            console.log(user.sexe);

            if (user.password != req.body.password) {
                res.json({
                    success: false,
                    message: 'Authentication failed. Wrong password.'
                });
            } else {
                var token = jwt.sign(user, app.get('salt'), {
                    expiresInMinutes: 1440 // expires in 24 hours
                });

                res.json({
                    success: true,
                    token: token
                });
            }
        }
    });
});

在控制台中检索并隐藏用户,如下所示:

{ sexe: 'H',
  email: 'MrPanda@gmail.com',
  password: 'bambou',
  nickname: 'MrPanda',
  _id: 56cb703e7aef3f83c7dac0a7 }

这是完美的,但接着,以下三个consol.log返回以下三行:

MrPanda
MrPanda@gmail.com
undefined
H

我认为此时密码未定义的绝对没有理由,我试图将属性名称更改为'mdp',同样的问题......有什么想法吗?谢谢

1 个答案:

答案 0 :(得分:0)

如果您使用的是mongoose,则会返回普通的JSON对象。它实际上是一个特殊的mongoose对象,可能无法按预期运行。

您有两种选择:

  1. mongoose对象转换为JSON对象。

    • {lean: true}添加到Users选项参数。
    • JSON.stringify(user)
    • user.toJSON()
  2. 使用正确的get()set()方法(无论如何都应该这样做)。

    • user.get('password')
    • user.get('email')
    • user.get('name')
  3. 尝试并告诉我它是否仍无法正常工作。