programing

요청 본문이 KOA에 정의되지 않았습니다.

cafebook 2023. 10. 15. 17:53
반응형

요청 본문이 KOA에 정의되지 않았습니다.

아래와 같은 KOA가 있습니다.

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
}

그런 다음 jquery ajax를 통해 포스트 요청을 보냅니다.

 var xhr = $.ajax({
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            url: 'http://localhost/getit',
            data: {"name":"me"},
            success: function(response) {

            }
        });

하지만 코아와 인에서this.req내 데이터를 찾을 수 없습니다.구글 크롬 개발자 도구에서는 헤더를 볼 수 있고 모든 것이 OK를 보내지만 코아에서는 볼 수 없습니다.

갱신하다

정확한 것은 다음과 같습니다.

   function *getit(){
 console.log(this.request.body); //undefined
}

흥미롭게도, 같은 오류를 발견했지만 app.use() 문의 순서가 문제였습니다.아래 내용은 제게 맞지 않으며, 이 요청에 대해 'undefined'를 반환합니다.본문:

var koa = require('koa');
var router = require('koa-router');
var bodyParser = require('koa-body-parser');

var app = koa();
app.use(router(app));
app.use(bodyParser());

app.post('/login', function *() {
    this.response.body = this.request.body;
});

app.listen(3000);

그러나 두 app.use() 문의 순서를 다음과 같이 반대로 하면 다음과 같습니다.

app.use(bodyParser());
app.use(router(app));

그러면 이.request.body의 요소를 볼 수 있습니다.koa v0.5.5, koa-body-parser v1.0.0, koa-router v3.1.2, node v0.11.12를 사용하고 있습니다.

대신 코바디 모듈(코아바디파서가 내부적으로 사용하는 것과 동일한 모듈)을 사용하겠습니다.코드는 다음과 같습니다.

var koa = require('koa');
var _ = require('koa-route');
var parse = require('co-body');

var app = koa();

app.use(function* (next) {
  this.req.body = yield parse(this);
  yield next;
});

app.use(_.post('/login', function* () {
    this.body = this.req.body;
}));

app.listen(3000);

var body = yield parse(this);라인이 트릭을 수행합니다. 구문 분석 메서드는 요청을 구문 분석하려고 하지만 다음으로 대체할 수 있습니다.parse.json,parse.form아니면parse.text더 많은 통제가 필요한 경우에는

koa는 미들웨어를 초기화한 순서대로 사용합니다.따라서 바디파서 이전에 라우터를 삽입하면 작동하지 않습니다. 라우터 미들웨어에 도달하기 전에 요청이 파서로 전달되지 않으므로 요청이 파서되지 않고 koa는 요청을 무시합니다.body.를 주문하는 것이 정말 중요합니다.

해결책

댓글에 의하면, 제게 맞는 것은.this.request.body그리고.this.req.body올바르지 않습니다.

언급URL : https://stackoverflow.com/questions/22148087/request-body-is-undefined-in-koa

반응형