node.js - 快速限制请求大小
问题描述
我想在以下情况下限制上传的请求大小(简化):
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 包可以完成这项工作?
解决方案
最后,我使用@ambianBeing 提供的答案解决了这个问题,并重写了后来处理缓冲区而不是流的函数。
推荐阅读
- php - 两天后为 WooCommerce 保留订单发送自定义提醒电子邮件
- ms-access - 错误:- 对象“_global”的方法“范围”在同时运行 2 个函数时失败
- session - 如何在 JBoss 5 中通过会话 id 获取会话
- angularjs - 如何在angularjs中解码utf-16编码的字符串?
- amazon-web-services - 打包脚本错误 必须指定脚本文件或内联脚本
- android - 无法从 Android 中的 dataSnapShot 获取数据
- java - 需要将同一个应用程序部署到多个上下文,每个上下文都有不同的数据库 Tomcat7
- aws-cli - 将 python 3.6 升级到 3.7 后 awscli 停止工作
- android - 使用片段和活动android的回栈和回压
- sql-server - 根据先前和当前行值计算值