Nodejs rest post json(非表单方式) 的问题请教
Nodejs rest post json(非表单方式) 的问题请教
初学node,想基于node开放一个rest api,但是使用第三方应用向这个API post数据时取不到数据。以下的Demo主要部份(基于Express),demo单纯了为测试非form方式post数据时能否接收:
app.post('/postJsonTest', function(req, res){
res.set({'Content-Type':'text/json','Encodeing':'utf8'});
var content= req.body;
console.log(content);
//若是非form方式提交,这里就会为: {}
})
然后我用chrome postman post Raw(json)方式post 以下json: { “Id” : 1, “content”:‘asdasdasdasdasd’ }
node此时接收到的是:{}; 切换用form方式提交 node 就可以正常用req.body 取得post过来的数据;
非form方式,request header为 request payload; 是不是不能用 req.body接收非form post过来的数据还是怎么样,请各位大神指教下,谢谢!
当然,我可以帮助你解决这个问题。在处理非表单形式的 JSON 数据时,你需要确保正确地配置中间件来解析请求体中的 JSON 数据。在 Express 中,你可以使用 body-parser
或者直接使用 Express 内置的中间件来处理 JSON 数据。
示例代码
首先,确保你已经安装了必要的依赖项。如果你还没有安装 express
和 body-parser
,可以通过以下命令进行安装:
npm install express body-parser
接下来,创建一个简单的 Express 应用来处理 POST 请求,并解析 JSON 数据。
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用body-parser中间件来解析JSON格式的请求体
app.use(bodyParser.json());
app.post('/postJsonTest', (req, res) => {
// 设置响应头
res.set({'Content-Type': 'application/json', 'Encoding': 'utf8'});
// 获取请求体中的JSON数据
const content = req.body;
// 打印接收到的数据
console.log(content);
// 返回接收到的数据作为响应
res.send({ received: content });
});
// 启动服务器
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
解释
-
引入依赖:
- 引入
express
和body-parser
。
- 引入
-
使用中间件:
app.use(bodyParser.json());
这行代码会将body-parser
配置为解析 JSON 格式的请求体。
-
处理POST请求:
- 在
/postJsonTest
路径上处理 POST 请求。 - 使用
req.body
来访问请求体中的 JSON 数据。 - 打印接收到的数据到控制台。
- 将接收到的数据作为 JSON 响应返回给客户端。
- 在
-
启动服务器:
- 监听指定端口(默认为 3000)。
使用 Postman 测试
- 打开 Postman。
- 选择 POST 方法。
- 输入 URL:
http://localhost:3000/postJsonTest
。 - 在 Body 标签下选择
raw
并选择JSON
类型。 - 输入以下 JSON 数据:
{ "Id": 1, "content": "asdasdasdasdasd" }
- 发送请求并查看控制台输出以及 Postman 的响应。
这样配置后,你应该能够正确地接收和处理非表单形式的 JSON 数据。希望这能解决你的问题!
。。。呃,不用expresion这样子实现还行,但express的实现方式应该要怎么写?
(非express 实现): var http = require(‘http’);
function start() { function onRequest(request, response) { //var urlPath = url.parse(request.url).pathname; if (request.method == ‘POST’) { request.setEncoding(‘utf8’);
var postData = ‘’; request.addListener(“data”, function(postDataChunk) { postData += postDataChunk; console.log(“Received POST data chunk '” + postDataChunk + “’.”); });
request.addListener(“end”, function() { var c = postData; console.log©; }); } } http.createServer(onRequest).listen(8080); console.log(‘Service is started listen 8080!’); } start();
当你使用非表单方式(如JSON)POST数据到Node.js应用时,需要确保你的应用能够解析请求体中的JSON数据。默认情况下,Express框架并不具备这种能力,你需要使用中间件来处理这种场景。最常用的是body-parser
或Express 4.16版本以后内置的express.json()
中间件。
示例代码
首先,确保你已经安装了express
和express.json()
:
npm install express
然后,在你的Express应用中配置express.json()
中间件:
const express = require('express');
const app = express();
// 解析JSON格式的请求体
app.use(express.json());
app.post('/postJsonTest', function(req, res){
// 现在req.body应该包含解析后的JSON数据
var content = req.body;
console.log(content); // 应该输出 { Id: 1, content: 'asdasdasdasdasd' }
res.send({ message: 'Data received correctly!' });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
- 引入中间件:通过
express.json()
来解析传入的JSON数据。 - 使用中间件:通过
app.use(express.json())
将其添加到中间件链中,这样所有后续的路由都可以访问到解析过的req.body
对象。 - 接收数据:当客户端POST JSON数据时,Express会自动解析这些数据,并将其填充到
req.body
属性中。
使用上述配置后,当你通过Postman或其他工具发送JSON数据到/postJsonTest
端点时,Express将正确地解析这些数据并存储在req.body
中,从而允许你访问这些数据。