2013-09-03 7 views
8

Ich versuche, Update-Funktionalität zu einer Express.js-App zu implementieren, und ich möchte eine PUT-Anfrage verwenden, um die neuen Daten zu senden, aber ich bekomme Fehler mit PUT. Nach allem, was ich gelesen habe, ist es nur eine Frage von app.put, aber das funktioniert nicht. Ich habe in meiner Routen-Datei die folgende bekommen:Verwenden der PUT-Methode mit Express.js

send = function(req, res) { 
    req.send(res.locals.content); 
}; 

app.put('/api/:company', function(res,req) { 
    res.send('this is an update'); 
}, send); 

Als ich Postbote verwenden, um eine PUT-Anfrage zu machen, erhalte ich eine „kann PUT/api/petshop nicht“ als Fehler. Ich verstehe nicht, warum ich nicht PUT oder was falsch läuft.

+1

Welchen Fehler zeigen im Postboten, 500? 404? – wayne

+2

Haben Sie versucht, methodOverride() zu verwenden? http://StackOverflow.com/a/8378414/918608 http://StackOverflow.com/A/14174177/918608 –

Antwort

9

Möglicherweise fehlt Ihnen die eigentliche Aktualisierungsfunktion. Sie haben den Put-Pfad, der das Ergebnis an den Client zurückgibt, aber das Teil fehlt, wenn Sie der Datenbank mitteilen, dass sie die Daten aktualisieren soll.

app.put('/api/:company', function (req, res) { 
    var company = req.company; 

    company = _.extend(company, req.body); 

    company.save(function(err) { 
    if (err) { 
     return res.send('/company', { 
      errors: err.errors, 
      company: company 
     }); 
    } else { 
     res.jsonp(company); 
    } 

}); 

Diese mean stack project kann Ihnen helfen, da es diese CRUD-Funktionalität umfasst, die ich verwendet, nur hier ihre Artikel aus dem Unternehmen tauschen:

Wenn Sie mit mongodb und auszudrücken, könnte man so etwas schreiben. gleich.

+0

sind die 'req' und' res' Argumente im Callback in der falschen Reihenfolge? Sollte 'Funktion (req, res)' sein? http://expressjs.com/api.html#app.put.method – Akurn

+0

@Akurn, ja sollte req res sein. – danilodeveloper

-3

Haben Sie Ihre Kopfzeileninformationen ausgecheckt? Da der Header header['content-type'] = 'apllication/json'; sein sollte, dann erhalten Sie nur das Update-Objekt auf der Serverseite (node-express), andernfalls erhalten Sie, wenn Sie den Inhaltstyp plain text/htm haben, empty req.body im Knoten.