我将以下JSON字符串发送到服务器。
(
{
id = 1;
name = foo;
},
{
id = 2;
name = bar;
}
)
在服务器上我有这个。
app.post('/', function(request, response) {
console.log("Got response: " + response.statusCode);
response.on('data', function(chunk) {
queryResponse+=chunk;
console.log('data');
});
response.on('end', function(){
console.log('end');
});
});
当我发送字符串时,它显示我得到了一个200响应,但是另外两个方法从来没有运行过,这是为什么呢?
7条答案
按热度按时间5jvtdoz21#
我认为您混淆了
response
对象和request
对象的使用。response
对象用于将HTTP响应发送回调用客户端,而您希望访问request
的主体,请参阅answer,它提供了一些指导。如果您使用的是有效的JSON并使用
Content-Type: application/json
对其进行POST,那么您可以使用bodyParser
中间件来解析请求主体,并将结果放在路由的request.body
中。针对Express 4.16+的更新
从版本4.16.0开始,提供了一个新的
express.json()
中间件。针对Express 4.0 - 4.15进行了更新
在v4之后,主体解析器被拆分到其自己的npm包中,需要单独安装
npm install body-parser
对于早期版本的Express(〈4)
沿着以下方式进行测试:
qcuzuvrc2#
对于Express v4+
从npm安装主体解析器。
https://www.npmjs.org/package/body-parser#installation
dluptydi3#
对于在
req.body
中获取空对象的用户我忘了在请求中设置
headers: {"Content-Type": "application/json"}
。更改它解决了问题。jtjikinw4#
@丹尼尔Thompson提到他忘记添加{“内容类型”:“application/json”}在request中。他能够更改请求,但是,更改请求并不总是可能的(我们在这里是在服务器上工作)。
在我的例子中,我需要强制content-type:text/plain将被解析为json。
如果无法更改请求的内容类型,请尝试使用以下代码:
与全局使用express.json()不同,我更喜欢只在需要的地方应用它,例如在POST请求中:
型
bxpogfeg5#
这个app.use(express.json)现在允许您读取传入的post JSON对象
ruoxqz4g6#
有时候你不需要第三方库来解析文本中的JSON,有时候你只需要下面的JS命令,先试试吧:
dpiehjr47#
初学者的错误...我在本地模块中使用
app.use(express.json());
,而不是在主文件(入口点)中使用。