我开始使用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',同样的问题......有什么想法吗?谢谢
答案 0 :(得分:0)
如果您使用的是mongoose
,则不会返回普通的JSON对象。它实际上是一个特殊的mongoose
对象,可能无法按预期运行。
您有两种选择:
将mongoose
对象转换为JSON
对象。
{lean: true}
添加到Users
选项参数。JSON.stringify(user)
user.toJSON()
使用正确的get()
和set()
方法(无论如何都应该这样做)。
user.get('password')
user.get('email')
user.get('name')
尝试并告诉我它是否仍无法正常工作。