2013-04-13 9 views
8

Hallo suchen i Problem mit bin mit den neuen Versionen von node.js mit Früher verwendete ich einen Code wie dieserTypeerror: Kann nicht ‚in‘ Operator für ‚_id‘ in männlichen

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' 

Und Code in 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'); 
     } 
    }); 
} 

Das komplette Fehlerprotokoll ist wie folgt:

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) 

Das Problem mit Co scheint nnect-form, die ich kenne, ist jetzt veraltet, also benutze ich jetzt formidable. Kann jemand mir helfen, diesen Fehler zu lösen

+2

Der Teil, wo Sie alle Benutzer finden und dann durchlaufen sie in Knoten, auf der Suche nach der richtigen E-Mail, ist ein bisschen komisch. Warum nicht 'User.find ({email: email}, // ...'? Was den eigentlichen Fehler betrifft, kann ich nicht sehen, dass Sie den in-operator in dem von Ihnen geposteten Code verwenden. –

+0

Ich erhalte einen Fehler @ var sex = new User (req.body.user.sex), auch wenn ich den Rest des Codes nicht verwende, ist das, was mich betrifft. – Inventillect

Antwort

18

Sie erhalten diesen Fehler, weil Sie Ihre Modellinstanz nicht ordnungsgemäß erstellen. Es erwartet einen Hash der Eigenschaften und ihrer entsprechenden Werte, aber der Parameter, den Sie bereitstellen, ist stattdessen eine Zeichenkette. Von Ihrem Code oben ist req.body.user ein Hash {sex: "male"} wohingegen req.body.user.sex nur eine Zeichenfolge "männlich" ist. Du kannst tun;

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

Aber Sie können nicht tun;

user = new User("male"); 

Die warum Ihre erste "User" Instanz mit req.body.user Parametern arbeiten, erklärt aber nicht mit req.body.user.sex Parametern. Ich bin mir noch nicht sicher, was Sie mit var sex = new User(req.body.user.sex); erreichen möchten Möchten Sie eine andere Benutzermodellinstanz erstellen? oder ein assoziiertes Sexualmodell?

+0

var "sex" ist eine Zeichenfolge, die den "Wert" speichert des ausgewählten Geschlechts Ich erstelle kein neues Modell, sondern weise den aus dem Formular gesammelten Wert des Geschlechtes dem variablen Geschlecht zu, das ich später im Code verwende. – Inventillect

Verwandte Themen