如何使用`bodyParser.raw()`获取原始体?

时间:2016-07-19 21:33:27

标签: node.js express body-parser

我正在使用Express创建一个Web API。 该功能允许API用户将文件发送到服务器。

这是我的应用设置代码:

var express = require('express');
var path = require('path');
// ...
var bodyParser = require('body-parser');

var routes = require('./routes/index');
var users = require('./routes/users');

// API routes
var images = require('./routes/api/img');

var app = express();

app.use(bodyParser.raw());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/api', images);

// ...

module.exports = app;

请注意我使用的是app.use(bodyParser.raw());

如何从POST请求中获取原始字节?

const express = require('express');
const router = express.Router();

/* POST api/img */
router.post('/img', function(req, res, next) {

  // how do I get the raw bytes?

});

module.exports = router;

2 个答案:

答案 0 :(得分:2)

应在req.body上设置已解析的正文。

请记住,中间件是按照您使用app.use设置的顺序应用的,我的理解是,按照您的方式多次应用bodyParser会尝试按顺序解析主体,从而为您留下结果在req.body上操作的最后一个中间件,即因为bodyParser.json()和bodyParser.raw()都接受任何输入,你实际上最终会尝试解析从Buffer到JSON的所有内容。

答案 1 :(得分:2)

如果您想发送原始数据并使用身体解析器,您只需这样配置:

app.use(bodyParser.raw({ inflate: true, limit: '100kb', type: 'text/xml' }));

这种行为不会破坏身体内容。