Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在node.js上接收post数据_Node.js - Fatal编程技术网

未在node.js上接收post数据

未在node.js上接收post数据,node.js,Node.js,我有一个非常简单的node.js服务器: const express = require("express"); const app = express(); app.post("/searcharea", (req, res, next) => { console.log("SEARCH AREA2"); console.log(req.body); res.status(200).send({ok:true});

我有一个非常简单的node.js服务器:

const express = require("express");
const app = express();

app.post("/searcharea", (req, res, next) => {
  console.log("SEARCH AREA2");
  console.log(req.body);
  res.status(200).send({ok:true});
});

app.listen(3000, () => {
  console.log("Server running on port 3000")
});
然而,当我使用curl并向服务器发送数据时,我得到一个未定义的req.body。这是我在测试时的curl语句

curl——标题“内容类型:应用程序/json”
--请帖
--数据“{”用户名“:”搜索“:”此处“}”
http://localhost:3000/searcharea

任何指导都将不胜感激。

我不确定此数据结构:
'{“username”:“search”:“here”}'
,但要从express服务器接收json数据,需要像这样使用json中间件

const express=require(“express”);
常量app=express();
//!重要的
使用(express.json());
app.post(“/searcharea)”,(请求、回复、下一步)=>{
控制台日志(“搜索区域2”);
控制台日志(请求主体);
res.status(200).send({ok:true});
});
app.listen(3000,()=>{
console.log(“在端口3000上运行的服务器”)
});

默认情况下,
req.body
将是未定义的。您需要包含某种POST请求。Express.js在v4.x及更高版本中将其打包。包含的一个可以处理大多数POST正文,但不处理多部分请求。您将需要类似的内容将代码更改为:

const express = require("express");
const app = express();

// parse JSON request body
app.use(express.json());

app.post("/searcharea", (req, res, next) => {
  console.log("SEARCH AREA2");
  console.log(req.body);
  res.status(200).send({ok:true});
});

app.listen(3000, () => {
  console.log("Server running on port 3000")
});

这起作用了。我真的不明白为什么我看不到发送的原始数据,但中间件看起来是必要的。@TommieJones Express通过将中间件链接在一起来工作。
app.use
告诉express应该在
app.use之后的每个中间件之前使用
。这包括
app.post
。默认情况下,express不会尝试解析请求的内容。如果检查req对象,即使没有中间件,您仍然可以看到带有数据的实际请求。但是如果您将中间件
json
放入,它将尝试解析请求,如果解析成功,它将把结果放入请求对象的主体中。