快递限制请求大小
在以下情况下(简化),我想限制上传的请求大小:
app = Express();
router = Express.Router();
router.use('/upload', (req, res, next) => {
const writeStream = fs.createWriteStream('filename');
req.pipe(writeStream);
});
app.use(router);
如您所见,没有使用任何形式或类似形式(无法更改此形式)。因此,该数据作为原始数据流提供。
由于在这种情况下我找不到任何现有的模块(body-parser在这种情况下不起作用,raw-body也不能使用,因为应保持流不变),我目前的方法是使用以下方法代码作为快递的中间件:
function(req, res, next) {
if (req.headers['content-length'] > limit) {
res.set("Connection", "close");
res.status(413).end();
return;
}
let received = 0;
req.on('data', (chunk) => {
received += chunk.length;
if (received > limit) {
res.set("Connection", "close");
res.status(413).end();
}
})
next();
})
还有其他更好的方法吗?有没有现成的npm软件包可以做到这一点?
回答如下:最后,我使用@ambianBeing提供的答案解决了它,并重写了后来处理缓冲区而不是流的函数。