Nodejs 如何取未处理前的post数据
Nodejs 如何取未处理前的post数据
我现在要接收一个post数据,但是数据是个xml格式,所以不需要它去自动解析的。 现在我想知道,用什么方法可以取到这个数据 由于使用了express的bodyparser,所以不知道再怎么去取原本的数据了。
要解决这个问题,我们需要拦截Express应用中传递给body-parser的原始POST数据。默认情况下,body-parser会将接收到的XML数据解析成JavaScript对象。但如果你希望获取原始数据而不进行解析,可以通过一些额外的配置来实现。
示例代码
首先,确保你已经安装了body-parser模块:
npm install body-parser
然后,在你的Express应用中,你可以这样配置:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用 raw 中间件来获取原始POST数据
app.use(bodyParser.raw({ type: 'application/xml', limit: '50mb' }));
app.post('/receive-data', (req, res) => {
// 获取原始POST数据
const xmlData = req.body;
console.log(xmlData.toString()); // 输出原始XML数据
// 这里可以添加你的逻辑来处理xmlData
res.send('数据已接收');
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
解释
-
中间件配置:我们使用
bodyParser.raw()中间件来接收原始的POST数据。type: 'application/xml'指定了只对XML类型的数据应用此中间件,limit: '50mb'限制了请求体的最大大小为50MB。 -
获取原始数据:在路由处理器中,
req.body直接包含了原始的POST数据(即XML字符串)。你可以通过.toString()方法将其转换回字符串格式以便查看或进一步处理。
这种方法让你能够直接访问未被解析的原始POST数据,避免了body-parser的自动解析过程。这在需要处理原始XML数据时特别有用。
request的body应该就是原始的
var express = require('./node_modules/express');
var app = express.createServer();
app.use (function(req, res, next) {
var data='';
req.setEncoding('utf8');
req.on('data', function(chunk) {
data += chunk;
});
req.on('end', function() {
req.body = data;
next();
});
});
app.post('/', function(req, res)
{
console.log(req.body);
});
app.listen(80);
在Express中,默认情况下,body-parser中间件会解析POST请求中的数据并将其转换为对象。如果你希望获取未经解析的原始POST数据(例如XML格式),你需要采取一些额外的步骤。
你可以使用raw解析器来获取原始数据。以下是如何实现这一需求的示例代码:
示例代码
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用bodyParser.raw()来获取未经解析的原始POST数据
app.use(bodyParser.raw({ type: 'application/xml' }));
app.post('/receive-data', (req, res) => {
// req.body 是原始的XML数据
const xmlData = req.body;
console.log(xmlData.toString()); // 打印原始的XML数据
res.send('数据已接收');
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
解释
-
引入依赖:
express:Web框架。body-parser:用于解析请求体的中间件。
-
使用bodyParser.raw():
bodyParser.raw()用于获取未经解析的原始数据。通过指定type: 'application/xml',我们可以确保只有符合该类型的请求体才会被以原始形式接收。
-
处理POST请求:
- 在
/receive-data路由上,req.body包含了未经解析的原始POST数据。 - 你可以通过
.toString()将Buffer对象转换为字符串进行查看或进一步处理。
- 在
通过这种方式,你可以轻松地获取并处理未经解析的原始POST数据,而不受body-parser自动解析的影响。

