2013-04-13 2 views
8

Ciao io sto avendo problema con l'utilizzo delle nuove versioni di node.js In precedenza ho usato un codice come questoTypeError: Non può usare 'in' operatore per la ricerca di '_id' nel maschio

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' 

E il codice 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'); 
     } 
    }); 
} 

Il log di errore completo è il seguente:

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) 

Il problema sembra con il co nnect-form che so è deprecato ora, quindi sto usando formidabile ora. Qualcuno può aiutarmi a risolvere questo errore

+2

La parte in cui si trovano tutti gli utenti e quindi i loop attraverso di essi nel nodo, cercando l'email corretta, è un po 'strana. Perché non 'User.find ({email: email}, // ...'? Come per l'errore effettivo non riesco a vedere che stai utilizzando l'operatore in-in nel codice che hai postato. –

+0

sto ricevendo errore @ var sex = new User (req.body.user.sex), anche se non uso il resto del codice, questo è ciò che mi riguarda – Inventillect

risposta

18

Si sta ottenendo questo errore perché non si sta costruendo l'istanza del modello correttamente. Si aspetta un hash di proprietà e i loro valori corrispondenti, ma il parametro che stai fornendo è invece una stringa. Dal tuo codice sopra, req.body.user è un hash {sex: "male"} mentre req.body.user.sex è solo una stringa "maschio". Tu puoi fare;

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

Ma non si può fare;

user = new User("male"); 

che spiega il motivo per cui la prima istanza di "utente" con req.body.user opere di parametri, ma non riesce con il parametro req.body.user.sex. Non sono ancora sicuro di cosa stai cercando di ottenere con var sex = new User(req.body.user.sex); Vuoi creare un'altra istanza del modello utente? o un modello sessuale associato?

+0

var "sex" è una stringa che memorizzerà il "valore" del sesso selezionato Non sto creando alcun nuovo modello, piuttosto sto assegnando il valore del sesso raccolto dalla forma alla variabile sesso che potrei usare in seguito nel codice. – Inventillect

Problemi correlati