未在node.js上接收post数据
我有一个非常简单的node.js服务器:未在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});
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
放入,它将尝试解析请求,如果解析成功,它将把结果放入请求对象的主体中。