我正在使用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;
答案 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' }));
这种行为不会破坏身体内容。