【问题标题】:TypeError: Cannot use 'in' operator to search for '_id' in maleTypeError:无法使用“in”运算符在男性中搜索“_id”
【发布时间】:2013-04-05 19:28:41
【问题描述】:

您好,我在使用新版本的 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'

以及 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');
      }
    });
 }

完整的错误日志如下:

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)

问题似乎与我知道现在已弃用的连接表单有关,所以我现在使用的是强大的。谁能帮我解决这个错误

【问题讨论】:

  • 找到所有用户然后在节点中循环遍历他们以查找正确电子邮件的部分有点奇怪。为什么不User.find({ email: email }, //...?至于实际错误,我看不到您在发布的代码中使用了 in-operator。
  • 我收到错误@var sex = new User(req.body.user.sex);即使我不使用其余代码,这也是我所关心的。

标签: node.js mongodb express mongoose


【解决方案1】:

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

user = new User({sex: "male"});

但你不能这样做;

user = new User("male");

这解释了为什么您的第一个带有 req.body.user 参数的“用户”实例可以工作,但带有 req.body.user.sex 参数却失败了。 我还不确定你想用var sex = new User(req.body.user.sex); 实现什么你想创建另一个用户模型实例吗?还是相关的性别模型?

【讨论】:

  • var "sex" 是一个字符串,将存储所选性别的“值”。我没有创建任何新模型。相反,我将从表单收集的性别值分配给我稍后可能在代码中使用的变量性别。
猜你喜欢
  • 2015-02-19
  • 2013-06-10
  • 2013-01-15
  • 2018-05-17
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多