node.js 类型错误:无法使用“in”运算符在男性中搜索“_id”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15985434/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
TypeError: Cannot use 'in' operator to search for '_id' in male
提问by Abdul Hamid
Hi i am having issue with using the new versions of node.js Earlier i used a code like this
嗨,我在使用新版本的 node.js 时遇到问题 早些时候我使用了这样的代码
label(for='user_sex') Sex:
select(id='user_sex', name='user[sex]')
option(id='user_male',value=user.sex,selected=1)='male'
option(id='user_female',value=user.sex)='female'
And code in app.js
和 app.js 中的代码
var user = new User(req.body.user);
-- other code
var sex = new User(req.body.user.sex);
User.find({}, function(err, users) {
for(var i = 0;i< users.length;i++) {
if(users[i].email == email) {
useremail = users[i].email;
}
}
if(!useremail) {
user.save(function(err) {
if (err) return userSaveFailed();
req.flash('info', 'Your account has been created');
emails.sendWelcome(user);
switch (req.params.format) {
case 'json':
res.send(user.toObject());
break;
default:
req.session.user_id = user.id;
res.redirect('/userinfo');
}
});
}
The complete error log is as follows:
完整的错误日志如下:
500 TypeError: Cannot use 'in' operator to search for '_id' in male
at model.Document.$__buildDoc (C:\SocialNetwork\node_modules\mongoose\lib\document.js:159:27)
at model.Document (C:\SocialNetwork\node_modules\mongoose\lib\document.js:58:20)
at model.Model (C:\SocialNetwork\node_modules\mongoose\lib\model.js:38:12)
at new model (C:\SocialNetwork\node_modules\mongoose\lib\model.js:2092:11)
at C:\SocialNetwork\app.js:1033:13
at callbacks (C:\SocialNetwork\node_modules\express\lib\router\index.js:272:11)
at param (C:\SocialNetwork\node_modules\express\lib\router\index.js:246:11)
at param (C:\SocialNetwork\node_modules\express\lib\router\index.js:243:11)
at pass (C:\SocialNetwork\node_modules\express\lib\router\index.js:253:5)
at Router._dispatch (C:\SocialNetwork\node_modules\express\lib\router\index.js:280:5)
The problem seems with connect-form which i know is deprecated now, so i am using formidable now. Can anybody help me out to solve this error
问题似乎与我知道现在已弃用的连接表单有关,所以我现在使用的是强大的。谁能帮我解决这个错误
回答by dantheta
You are getting this error because you're not constructing your model instance properly. It expects a hash of properties and their corresponding values but the parameter you're are providing is a string instead.
From your code above, req.body.user is a hash {sex: "male"}whereas req.body.user.sex is just a string "male". You can do;
您收到此错误是因为您没有正确构建模型实例。它需要一个属性及其相应值的散列,但您提供的参数是一个字符串。从上面的代码中,req.body.user 是一个哈希值,{sex: "male"}而 req.body.user.sex 只是一个字符串“male”。你可以做;
user = new User({sex: "male"});
But you can't do;
但你做不到;
user = new User("male");
That explains why your first "User" instance with req.body.user parameter works but fails with req.body.user.sex parameter.
I'm not sure yet what you're trying to achieve with var sex = new User(req.body.user.sex);Do you want to create another User model instance? or an associated sex model?
这解释了为什么您的第一个带有 req.body.user 参数的“用户”实例可以工作,但使用 req.body.user.sex 参数失败。我还不确定你想要实现var sex = new User(req.body.user.sex);什么你想创建另一个用户模型实例吗?或相关的性爱模特?

