2016-11-06 9 views
0

Ich versuche, eine Bearbeitungsseite hinzuzufügen, wo ich das Namensfeld im mongodb ändern kann.Aber ich habe Probleme mit dem Routing, kann jemand bitte helfen? hier ist das Routing:Update Mongodb mit Knoten js Express und PUG (JADE)

router.put('/edit', function(req, res) { 
user.findByIdAndUpdate({_id: req.params.id}, 
       { 
     name: req.body.name 
    }); 
    }); 

Und hier ist edit.pug

extends layout 

block content 
    .main.container.clearfix 
    h1 Editing #{name}'s profile! 
    form(method="POST", action="/edit") 
    input(type="hidden", name="_method", value="PUT") 
    p Name: 
     input#name.form-control(type='text', value='#{name}') 
    p 
     input(type="submit") 

Danke

Antwort

0

Okay, es gibt ein paar Dinge, die ich hier sehe ich glaube, ich klären helfen:

user.findByIdAndUpdate - nimmt kein Objekt für das erste Argument, nur die _id. http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

req.params - ist dieser Rückruf auf die Route verbunden ist angebracht, so in der Route müssen Sie ein /:id setzen auszudrücken, dass der Wert ändern kann, sondern als req.params.id verfügbar sein. Grundsätzlich sollten Sie Ihre Route aussieht router.put('/edit/:id', function(req, res) {... http://expressjs.com/en/guide/routing.html#route-parameters

Sie auch in das options Argument der findByIdAndUpdate Methode suchen mögen, da standardmäßig es das Originaldokument aus seinem Nachschlag gibt nicht derjenige die db nach dem Updates gespeichert hat angewendet.

so Ihr Knoten Code soll wie folgt aussehen:

router.put('/edit/:id', function(req, res) { 
user.findByIdAndUpdate(
    req.params.id, // Which _id mongoose should search for 
    { name: req.body.name }, //Updates to apply to the found document. 
    { new: true }); // This tells mongoose to return the new updates back from the db 
    });