简体   繁体   English

正文解析器的req.body返回未定义

[英]Body parser's req.body returns undefined

I keep getting undefined for req.body . 我对req.body一直undefined Why? 为什么?

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)
});

EDIT : The above snippet is a simplified version, I thought I encompassed everything involved, but it runs fine. 编辑 :上面的代码段是一个简化的版本,我以为我涵盖了所涉及的所有内容,但是运行良好。 Here's the entire code: https://jsfiddle.net/dx9kswdy/ 这是完整的代码: https : //jsfiddle.net/dx9kswdy/

print out req only, if it is still undefined than it is not assigned a value when passed into the function. 仅打印要求,如果仍未定义,并且在传递给函数时未分配值。 if it returns a JSON file, parse it to an object! 如果返回JSON文件,则将其解析为对象!

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

When I started up your example, it logged the username from the body for me 当我启动您的示例时,它为我记录了正文中的用户名

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

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

What symptom are you getting? 你有什么症状? Is it an actual error, or are you just logging "undefined"? 这是一个实际错误,还是仅记录“未定义”? If you're just logging undefined, the problem is that the key username isn't found on your (correctly parsed) body. 如果您只是在记录未定义的日志,则问题在于在正确解析的正文中找不到关键用户名。 If you're getting an error, please post the full trace. 如果遇到错误,请发布完整跟踪。

Edit: pulled the fiddle and ran it. 编辑:拉小提琴并运行它。 Had to remove some relative imports, but your use of body-parser is just fine: 不得不删除一些相对的输入,但是您使用body解析器就可以了:

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)

from the request: 从请求:

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)

I've run into this a couple times, and here's what it usually ends up being: 我已经遇到过几次了,通常是这样的:

When you're making your request with curl/the browser, make sure you set the Content-Type header to application/json . 使用curl /浏览器发出请求时,请确保将Content-Type标头设置为application/json That's what triggers Express / the Express body parser to parse the string as JSON. 这就是触发Express / Express主体解析器将字符串解析为JSON的原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM