[node.js] Express.js req.body 정의되지 않음

Express 서버의 구성으로 이것을 가지고 있습니다

app.use(app.router); 
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
//Handles post requests
app.use(express.bodyParser());
//Handles put requests
app.use(express.methodOverride());

그러나 여전히 req.body.something경로에서 요청할 때이를 가리키는 오류가 발생합니다 body is undefined. 다음은 다음을 사용하는 경로의 예입니다 req.body.

app.post('/admin', function(req, res){
    console.log(req.body.name);
});

나는이 문제가 부족하기 때문에 발생한다는 것을 읽었 app.use(express.bodyParser());지만 알 수 있듯이 경로 전에 호출합니다.

실마리?



답변

경로를 정의하기 전에 모든 구성을 정의해야합니다. 그렇게하면 계속 사용할 수 있습니다 express.bodyParser().

예를 들면 다음과 같습니다.

var express = require('express'),
    app     = express(),
    port    = parseInt(process.env.PORT, 10) || 8080;

app.configure(function(){
  app.use(express.bodyParser());
  app.use(app.router);
});

app.listen(port);

app.post("/someRoute", function(req, res) {
  console.log(req.body);
  res.send({ status: 'SUCCESS' });
});


답변

최신 버전의 Express (4.x)는 핵심 프레임 워크에서 미들웨어를 번들 해제했습니다. 본문 파서가 필요한 경우 별도로 설치해야합니다.

npm install body-parser --save

그런 다음 코드 에서이 작업을 수행하십시오.

var bodyParser = require('body-parser')
var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())


답변

아니요 . app.use(express.bodyParser())전에 사용해야 app.use(app.router)합니다. 실제로 app.use(app.router)마지막으로 전화해야합니다.


답변

먼저 다음을 호출하여 ‘body-parser’라는 npm 모듈을 설치했는지 확인하십시오.

npm install body-parser --save

그런 다음 경로를 호출하기 전에 다음 줄을 포함했는지 확인하십시오

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

app.use(bodyParser.json());


답변

Express 4에는 바디 파서가 내장되어 있습니다. 별도의 본문 파서를 설치할 필요가 없습니다. 아래는 작동합니다.

export const app = express();
app.use(express.json());


답변

요청 헤더의 Content-Type은 특히 curl 또는 다른 도구에서 데이터를 게시 할 때 매우 중요합니다.

application / x-www-form-urlencoded, application / json 또는 기타와 같은 것을 사용하고 있는지 확인하십시오. 게시 데이터에 따라 다릅니다. 이 필드를 비워두면 Express가 혼동됩니다.


답변

한 의견 아래 이미 게시 된 것처럼 나는 그것을 사용하여 해결했다.

app.use(require('connect').bodyParser());

대신에

app.use(express.bodyParser());

나는 왜 단순한 express.bodyParser()것이 작동 하지 않는지 여전히 모른다 …