首页 > 解决方案 > 快速限制请求大小

问题描述

我想在以下情况下限制上传的请求大小(简化):

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,因为流应该保持不变),我目前的方法是使用以下代码作为express 的中间件:

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 包可以完成这项工作?

标签: node.jsexpress

解决方案


最后,我使用@ambianBeing 提供的答案解决了这个问题,并重写了后来处理缓冲区而不是流的函数。


推荐阅读