解析'多部分数据'使用express

parsing 'multipart-data' using express

本文关键字:使用 express 数据 多部 解析      更新时间:2023-09-26

我遇到了从客户端解析数据的奇怪问题。

我发现所有的"boolean true"都被转换为"string true",对于"undefined"也是如此,因此我不能在这些字段上做"if"。

这是我所拥有的:

var bodyParser = require('body-parser');
var app = express();
app.post('/someroute',function(req,res,next){
   console.log(typeof req.someBooleanValue);
});

我总是得到"string",我希望控制台中有布尔值,因为这是客户端发送的。

现在,如果内容类型设置为"application/json",它就可以正常工作

我知道body解析器不适用于"multipart"内容类型。但我有什么选择?我尝试过多党制和多党制。但在使用它们进行解析后,我仍然将字段作为字符串。

除了编写一个小实用程序来检查内容类型,然后使用JSON.parse("字段")或类似的东西对引号进行一些丑陋的剥离之外,没有其他方法可以处理这个问题吗?

我正在使用Busboy作为带有express.js的REST应用程序,以处理多部分/表单数据中的文件上传,它运行良好。

项目页面上提供了示例。只是一个警告,如果您需要处理文件上传,请确保您有一个用于保存文件的WriteableStream的'finish'事件的侦听器,并且您不完全依赖于busboy本身引发的'finish'事件。

它(在某种程度上)取决于客户端。

通过<form>元素(通过浏览器)上传的AFAIK、multipart/form-data部分没有类型化:它们要么包含文本(字符串)内容(用于"常规"字段),要么包含二进制内容(用于"文件"字段)。

换句话说,服务器端解析器将为您提供的所有字段都将是字符串。如果没有一些显式代码,multer/partiparty/etc就不知道true的字符串值是布尔值,所以你必须根据每个字段应该包含的内容,自己执行一些转换/强制转换。

如果您使用的是像cURL这样的CLI客户端,则可以将JSON"文件"作为单独的部分上传(此处对此进行了解释)。您仍然需要对传入数据调用JSON.parse(),因为它仍将作为字符串传递。