Размер запроса экспресс-лимита - PullRequest
1 голос
/ 24 сентября 2019

Я хотел бы ограничить размер запроса на загрузку в следующем случае (упрощенно):

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, который может выполнить эту работу?

1 Ответ

0 голосов
/ 26 сентября 2019

В конце я решил это, используя ответ, предоставленный @ambianBeing, и переписал функцию, которая впоследствии обрабатывает буфер вместо потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...