TypeError:不能使用'in'运算符来搜索男性中的'_id'

dar*_*mid 10 mongoose mongodb node.js express

嗨,我有使用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'
Run Code Online (Sandbox Code Playgroud)

和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');
      }
    });
 }
Run Code Online (Sandbox Code Playgroud)

完整的错误日志如下:

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)
Run Code Online (Sandbox Code Playgroud)

我知道现在已经弃用了连接形式的问题,所以我现在正在使用强大的功能.任何人都可以帮我解决这个错误

dan*_*eta 20

您收到此错误是因为您没有正确构建模型实例.它期望属性的散列及其对应的值,但是您提供的参数是字符串.从上面的代码中,req.body.user是一个哈希,{sex: "male"}而req.body.user.sex只是一个字符串"male".你可以做;

user = new User({sex: "male"});
Run Code Online (Sandbox Code Playgroud)

但你不能这样做;

user = new User("male");
Run Code Online (Sandbox Code Playgroud)

这就解释了为什么第一个带有req.body.user参数的"User"实例可以正常工作,但是使用req.body.user.sex参数失败了.我还不确定你想要实现的目标var sex = new User(req.body.user.sex);是否要创建另一个用户模型实例?或相关的性模型?