Request-Body nicht definiert ist in KOA
Habe ich KOA Wie unten :
var koa = require('koa'),
bodyParser = require('koa-body-parser'),
router = require('koa-router'),
app = koa();
app.use(router(app));
app.use(bodyParser());
app.post('http://localhost/get',getit);
function *getit(){
console.log(this.req.body); //undefined
}
dann senden Sie eine post-reqeust via jquery ajax :
var xhr = $.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: 'http://localhost/getit',
data: {"name":"me"},
success: function(response) {
}
});
aber in koa und in this.req
ich kann nicht finden, meine Daten. in google chrome developer tools kann ich den header und alles schicken, ok, aber ich kann nicht sehen, es in koa.
Update
die richtige ist :
function *getit(){
console.log(this.request.body); //undefined
}
bodyParser = require('koa-body-parser),
copy paste Problem? das ist ein offenes string-literal gibt- Nein,es ist nicht eine Kopie einfügen, es ist eine simulation von meinem problem. im fixieren des Fans aufgepasst.
- Ich denke, es heißt nun
request
stattreq
werden, so wie es im Express. Soconsole.log(this.request.body);
sollte Ihr problem lösen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Interessant, stieß ich auf den gleichen Fehler, aber mein Problem war die Bestellung von app.verwenden Sie () - Anweisungen. Die unten funktioniert bei mir NICHT, und gibt 'undefined' für diese.Anfrage.Körper:
Jedoch, wenn ich die Reihenfolge der beiden app.use () - Anweisungen, um die folgenden:
Sehe ich dann die Elemente in diesem.Anfrage.Körper. Ich bin mit koa v0.5.5, koa-Körper-parser v1.0.0, koa-router v3.1.2 und node-v0.11.12.
Ich würde das co-Körper Modul statt (das gleiche Modul verwendet intern von koa-Körper-parser). Sollte der code sieht wie folgt aus:
Den
var body = yield parse(this);
Linie funktioniert der trick, der parse-Methode wird versuchen, analysieren jede Anfrage, aber Sie können ersetzen es mitparse.json
,parse.form
oderparse.text
in Fall müssen Sie mehr Kontrollekoa verwendet middleware in der Reihenfolge initialisiert Sie. also, wenn Sie stecken Sie den router vor dem bodyparser wird es nicht funktionieren. da Ihre Anfrage nicht passieren, um den parser, bevor es auf die router-middleware, die Anforderung wird nicht geparst werden und koa ignorieren die Anfrage.Körper. so die Bestellung ist wirklich wichtig.
Lösung
Entsprechend zu kommentieren , das richtige für mich ist
this.request.body
undthis.req.body
ist nicht korrekt.