2016-06-05 2 views
0

req.body에 대해 undefined을 계속 유지합니다. 왜?본문 파서의 req.body가 반환하지 않음

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

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

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

편집은 : 위의 조각은 내가 모든 것을 포함 둘러싸인 생각, 단순화 된 버전이지만, 그것을 잘 실행됩니다. 여기에 전체 코드가 있습니다 : https://jsfiddle.net/dx9kswdy/

+0

줄 11에 여분의'}'가 있습니다. – gnerkus

+0

질문에 제공된 정보가 충분하지 않습니다. 질문 게시판에 오류 메시지의 전체 스택 추적을 추가 할 수 있습니까? – gnerkus

+0

@gnerkus 그건 내 잘못이야. 왜 내가 내 문제를 단순화했는지 미끄러졌다. 문제는 여전히 존재합니다. –

답변

0

출력이 req 인 경우, 함수에 전달 될 때 값이 지정되지 않은 채로 여전히 정의되지 않은 경우에만 정의됩니다. JSON 파일을 반환하면 객체로 파싱합니다! 나는 당신의 예를 시작했을 때

app.post('/', function (req, res) { 
    console.log(JSON.parse(req).body.username); 
}); 
+0

엄청난 JSON 파일을 반환했습니다. –

+0

JSON 파일 인 경우 해당 값을 찾기 전에 함수의 객체로 변환하십시오. –

+0

JSON 객체입니다. –

0

, 그것은 나를

curl -X POST -d '{"username": "doug"}' -H "content-type: application/json" localhost:3000

dougwade npm-experiments/express-undef » node index.js doug

당신이지고 어떤 증상의 몸에서 사용자 이름을 기록? 그것은 실제 오류입니까, 아니면 그냥 "정의되지 않은"로깅입니까? 정의되지 않은 상태로 로깅하는 경우 문제는 키 사용자 이름이 (올바르게 구문 분석 된) 본문에서 발견되지 않는다는 것입니다. 오류가 발생하면 전체 추적을 게시하십시오.

편집 : 바이올린을 가져 와서 실행했습니다. 어떤 상대 수입을 제거했지만, 몸 파서의 사용이 잘입니다 : 요청에서

dougwade npm-experiments/express-undef » node index.js doug ReferenceError: user is not defined at /Users/doug.wade/npm-experiments/express-undef/index.js:23:9 at Layer.handle [as handle_request] (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/layer.js:95:5) at next (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/layer.js:95:5) at /Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/index.js:277:22 at Function.process_params (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/index.js:330:12) at next (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/index.js:271:10) at /Users/doug.wade/npm-experiments/express-undef/node_modules/body-parser/lib/read.js:129:5 at invokeCallback (/Users/doug.wade/npm-experiments/express-undef/node_modules/raw-body/index.js:262:16)

:

dougwade npm-experiments/express-undef » curl -X POST -d '{"username": "doug"}' -H "content-type: application/json" localhost:3000 ReferenceError: user is not defined<br> &nbsp; &nbsp;at /Users/doug.wade/npm-experiments/express-undef/index.js:23:9<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/layer.js:95:5)<br> &nbsp; &nbsp;at next (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/route.js:131:13)<br> &nbsp; &nbsp;at Route.dispatch (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/route.js:112:3)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/layer.js:95:5)<br> &nbsp; &nbsp;at /Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/index.js:277:22<br> &nbsp; &nbsp;at Function.process_params (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/index.js:330:12)<br> &nbsp; &nbsp;at next (/Users/doug.wade/npm-experiments/express-undef/node_modules/express/lib/router/index.js:271:10)<br> &nbsp; &nbsp;at /Users/doug.wade/npm-experiments/express-undef/node_modules/body-parser/lib/read.js:129:5<br> &nbsp; &nbsp;at invokeCallback (/Users/doug.wade/npm-experiments/express-undef/node_modules/raw-body/index.js:262:16)

+0

잠재적 인 응답자를 혼동하지 않도록 코드를 단순화했습니다. 전체 내용은 다음과 같습니다. https://jsfiddle.net/dx9kswdy/ –

+0

질문에 답변이 없으므로 주석이어야합니다. – gnerkus

+0

@gnerkus 질문은 "왜 몸이 정의되지 않았습니까?"입니다. 대답은 "그다지"아니다. – prekolna

0

나는이 몇 번에 실행했습니다, 보통 다음과 같이 끝납니다 :

curl/브라우저로 요청할 때 Content-Type 헤더를 application/json으로 설정해야합니다. 이것이 익스프레스/익스프레스 본문 파서가 문자열을 JSON으로 구문 분석하도록하는 요인입니다.