📅  最后修改于: 2023-12-03 15:21:31.549000             🧑  作者: Mango
在Express框架中,body-parser是一个非常受欢迎的中间件,被用来解析来自客户端的HTTP请求的body,使req.body变得可用。然而,最近一些声音开始建议不再使用body-parser,而是选择其他解决方案。
默认情况下,body-parser会解析请求主体中所有的数据,并将其存储在内存中,可用于处理之后的请求。这意味着,如果请求体太大,或者是时常处理大量请求,就会严重影响应用的性能和稳定性。
body-parser的解析不仅仅是为了解析JSON数据。它还支持解析其他格式的数据,包括urlencoded和multipart/form-data。但是,如果使用不当,就会对应用程序产生安全风险。比如,如果解析urlencoded数据时,body-parser没有限制字段大小,攻击者就可以利用这种漏洞进行拒绝服务(DDoS)攻击。
由于body-parser的创建者已经将其标记为“已弃用”,所以它不再被改进或更新。这将导致一系列维护问题,例如缺少当前技术的支持、BUG修复、功能增强等问题。
Busboy是解析multipart/form-data的强大工具,它被设计为高效且易于使用。它可以有效地解决body-parser的安全问题和内存占用问题。
const busboy = require('busboy');
const express = require('express');
const app = express();
app.post('/upload', function(req, res) {
const bb = new busboy({ headers: req.headers });
bb.on('file', function(fieldname, file, filename, encoding, mimetype) {
// ...
});
bb.on('field', function(fieldname, val, fieldnameTruncated, valTruncated) {
// ...
});
bb.on('finish', function() {
res.sendStatus(200);
});
req.pipe(bb);
});
qsopt-express-file-parser是解析multipart/form-data的另一个轻量级解决方案。它大大提高了解析体积大文件的效率,比如视频或音频文件。它也可以避免body-parser的安全问题和内存占用问题。
const fileParser = require('qsopt-express-file-parser');
const express = require('express');
const app = express();
app.use(fileParser());
app.post('/upload', function(req, res) {
// ...
});
尽管body-parser在过去是Express开发者使用的主要工具之一,但现在已经不再推荐使用。相反,开发者应该选择其他解决方案,例如Busboy或qsopt-express-file-parser。这些工具具有更好的性能和安全性,并提供更好的维护性。