console.log('>>>>>>user = '+ user);
输出
>>>>>>user = { username: 'user1',
salt: '3303187e50a64889b41a7a1c66d3d3c10b9dec638fdd033bee1221d30d01c5e1',
hash: 'a174c206d88bee1594bb081dbd32d53420f6ef3d6322104f3d0722d58bc8dd8d',
_id: 52d3177481daf59c11000001,
__v: 0 }
但是
console.log('>>>>>>user.hash = '+ user.hash);
输出
>>>>>>user.hash = undefined
导致这种情况的原因是什么?
编辑:有趣的是,user._id
,(和仅它)有效。
答案 0 :(得分:3)
这完全是一个猫鼬问题。
解决方案是不要无架构。我在定义模式时使用strict: false
(用于使我的数据库模式更少)
var Users = mongoose.model('Users', new mongoose.Schema({
},{strict:false}));
在这里添加hash
解决了它。
var Users = mongoose.model('Users', new mongoose.Schema({
hash: String
},{strict:false}));
答案 1 :(得分:1)
我相信user
是object
并且要在JS中访问对象属性,请使用.
表示法(属性访问者)。
在上面发布的代码中我可以看到,ID字段缺少'引号',
user = { username: 'user1',
salt: '3303187e50a64889b41a7a1c66d3d3c10b9dec638fdd033bee1221d30d01c5e1',
hash: 'a174c206d88bee1594bb081dbd32d53420f6ef3d6322104f3d0722d58bc8dd8d',
_id: '52d3177481daf59c11000001',
__v: 0
};
console.log(user.hash); // accessing hash property of `user` Object.
答案 2 :(得分:0)
从this回答中提示,您可以尝试将findOne
参数更改为:
function(username, password, done){
Users.findOne({username:new require('mongodb').ObjectID(username)}, function(err, user) {
// do something here
});
}
注意:{username: new require('mongodb')。ObjectID(用户名)}
基本上,您需要构建“用户名”,而不是将其作为字符串传递给findOne
。