Nodejs 如何取未处理前的post数据

Nodejs 如何取未处理前的post数据

我现在要接收一个post数据,但是数据是个xml格式,所以不需要它去自动解析的。 现在我想知道,用什么方法可以取到这个数据 由于使用了express的bodyparser,所以不知道再怎么去取原本的数据了。

4 回复

要解决这个问题,我们需要拦截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');
});

解释

  1. 中间件配置:我们使用bodyParser.raw()中间件来接收原始的POST数据。type: 'application/xml'指定了只对XML类型的数据应用此中间件,limit: '50mb'限制了请求体的最大大小为50MB。

  2. 获取原始数据:在路由处理器中,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');
});

解释

  1. 引入依赖

    • express:Web框架。
    • body-parser:用于解析请求体的中间件。
  2. 使用bodyParser.raw()

    • bodyParser.raw()用于获取未经解析的原始数据。通过指定type: 'application/xml',我们可以确保只有符合该类型的请求体才会被以原始形式接收。
  3. 处理POST请求

    • /receive-data路由上,req.body包含了未经解析的原始POST数据。
    • 你可以通过.toString()Buffer对象转换为字符串进行查看或进一步处理。

通过这种方式,你可以轻松地获取并处理未经解析的原始POST数据,而不受body-parser自动解析的影响。

回到顶部