2017-12-03 2 views
1

Ich versuche, eine POST-Anfrage verwenden, um den Wert der Schaltfläche abgerufen und erstellt einen neuen Mongoose-Modelleintrag mit dem zurückgegebenen Wert vor dem Rendern einer neuen Seite und durch den Wert gehen.TypeError: Kann nicht 'in' Operator nach '_id' in einem

Wenn ich versuche, den neuen "Typ" zu erstellen, obwohl ich einen TypeError erhalte: "TypeError: Kann 'in' Operator nicht verwenden, um nach '_id' in einem zu suchen". Kann mir jemand helfen herauszufinden, was den Fehler verursacht und wie ich ihn beheben kann?

Form verwendet:

 <form action="/round/type" method="POST" class="form-inline"> 
      <div class="row"> 
       <div class="col"> 
        <button class="btn btn-lg btn-primary btn-block" name="roundType" value="one" type="submit">one</button> 
       </div> 
       <div class="col"> 
        <button class="btn btn-lg btn-primary btn-block" name="roundType" value="two" type="submit">two</button> 
       </div> 
       <div class="col"> 
        <button class="btn btn-lg btn-primary btn-block" name="roundType" value="three" type="submit">three</button> 
       </div> 
       <div class="col"> 
        <button class="btn btn-lg btn-primary btn-block" name="roundType" value="four" type="submit">four</button> 
       </div> 
      </div>  
     </form> 

Modell Schema:

var mongoose = require("mongoose"); 

//Schema Setup 
var TypeSchema = new mongoose.Schema({ 
    roundType: String, 
}); 

module.exports = mongoose.model("Type", TypeSchema); 

Beitrag Gesuch:

router.post("/type", function(req, res){ 
    console.log(req.body.roundType); //this console.log prints the correct value submitted 
    Type.create(req.body.roundType, function(err, newType){ 
     if(err){ 
      console.log(err); 
     } else{ 
      res.redirect("/round/group", {roundType: newType}); 
     } 
    }); 
}); 

Fehlermeldung:

TypeError: Cannot use 'in' operator to search for '_id' in one 

at model.Document.$__buildDoc (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/document.js:222:27) 
at model.Document (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/document.js:67:20) 
at model.Model (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:55:12) 
at new model (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:3867:13) 
at /home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:2035:51 
at /home/ubuntu/workspace/GolfSite_V2/node_modules/async/internal/parallel.js:27:9 
at eachOfArrayLike (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/eachOf.js:57:9) 
at exports.default (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/eachOf.js:9:5) 
at _parallel (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/internal/parallel.js:26:5) 
at parallelLimit (/home/ubuntu/workspace/GolfSite_V2/node_modules/async/parallel.js:85:26) 
at /home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:2056:5 
at new Promise.ES6 (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/promise.js:45:3) 
at Function.create (/home/ubuntu/workspace/GolfSite_V2/node_modules/mongoose/lib/model.js:2019:17) 
at /home/ubuntu/workspace/GolfSite_V2/routes/round.js:40:10 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/GolfSite_V2/node_modules/express/lib/router/layer.js:95:5) 
at next (/home/ubuntu/workspace/GolfSite_V2/node_modules/express/lib/router/route.js:137:13) 

Antwort

0

Model.create erwartet als ersten Parameter ein Dokument oder ein Array von Dokumenten. Momentan übergeben Sie nur einen Zeichenfolgenwert aus dem POST.

Der Code sollte ungefähr so ​​aussehen:

Type.create({roundType: req.body.roundType}, function(err, newType){ 
    // ... 
}) 

Die in Operator überprüft, ob eine Eigenschaft in einem Objekt vorhanden ist. Zum Beispiel:

let obj = {foo: 'bar'} 
console.log('foo' in obj) // true 

In diesem Fall versucht es die Eigenschaft zu finden _id - die MongoDB für ein Dokument als eindeutige Kennung verwendet - in der Zeichenfolge one. Es kann dies nicht tun, daher wird der Fehler ausgelöst.

Verwandte Themen