Я хотел бы ограничить размер запроса на загрузку в следующем случае (упрощенно):
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, который может выполнить эту работу?