首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >帖子上的req.body为空

帖子上的req.body为空
EN

Stack Overflow用户
提问于 2014-07-03 10:03:56
回答 27查看 358.9K关注 0票数 347

突然之间,我所有的项目都发生了这样的事情。

每当我使用express和正文解析器在nodejs中发布帖子时,req.body都是一个空对象。

代码语言:javascript
复制
var express    = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())

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

app.listen(2000);

app.post("/", function (req, res) {
  console.log(req.body) // populated!
  res.send(200, req.body);
});

通过ajax和邮递员,它总是空的。

然而,通过curl

代码语言:javascript
复制
$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/

它按预期工作。

我尝试在前者中手动设置Content-type : application/json,但之后总是得到400 bad request

这已经让我抓狂了。

我认为这是body-parser中更新的东西,但我降级了,它没有帮助。

感谢您的帮助,谢谢。

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2014-07-03 23:18:24

在Postman的3个可用内容类型选项中,选择"X-www-form-urlencoded“,它应该可以工作。

此外,要消除错误消息,请替换:

代码语言:javascript
复制
app.use(bodyParser.urlencoded())

通过以下方式:

代码语言:javascript
复制
app.use(bodyParser.urlencoded({
  extended: true
}));

请参阅https://github.com/expressjs/body-parser

'body-parser‘中间件只处理JSON和urlencoded数据,不处理多部分数据

正如@SujeetAgrahari提到的,正文解析器现在内置了express.js。

在JSON bodies的最新版本中使用app.use(express.json());来实现它。对于URL编码的主体(由HTTP form POSTs生成的那种),使用app.use(express.urlencoded());

票数 339
EN

Stack Overflow用户

发布于 2014-09-18 12:13:16

对于Postman,要使用原始JSON数据有效负载测试HTTP post操作,请选择raw选项并设置以下标头参数:

代码语言:javascript
复制
Content-Type: application/json

此外,请确保在JSON有效负载中用双引号将用作键/值的任何字符串括起来。

body-parser包可以很好地解析多行原始JSON有效负载。

代码语言:javascript
复制
{
    "foo": "bar"
}

使用Postman v0.8.4.13扩展(body-parser v1.12.2和express v4.12.3)在Chrome v37和v41中测试,设置如下:

代码语言:javascript
复制
var express = require('express');
var app = express();
var bodyParser = require('body-parser');

// configure the app to use bodyParser()
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

// ... Your routes and methods here

票数 267
EN

Stack Overflow用户

发布于 2015-01-28 03:22:45

我犯了一个非常愚蠢的错误,忘记在html文件中为输入定义name属性。

因此,不是

代码语言:javascript
复制
<input type="password" class="form-control" id="password">

我有这个。

代码语言:javascript
复制
<input type="password" class="form-control" id="password" name="password">

现在,request.body是这样填充的:{ password: 'hhiiii' }

票数 68
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24543847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档