解析多部分数据'使用快递

时间:2015-11-02 21:05:46

标签: javascript json express multipartform-data body-parser

我有这个从客户端解析数据这个奇怪的问题。

我发现所有'布尔值为真'转换为'字符串为true,对于' undefined'因此,如果'在这些领域。

这就是我所拥有的:

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

我总是得到' string'我希望在控制台中使用布尔值,因为这是客户端发送的内容。

现在,如果将内容类型设置为' application / json'

,它可以正常工作

我知道身体解析器不会使用“多部分”工作。内容类型。但那我有什么选择呢?我尝试过多方和multr。但是使用它们解析后,我仍然将字段作为字符串。

除了编写一个检查内容类型的小实用程序然后使用JSON.parse(' fields')或类似的东西做一些丑陋的引号之外,没有其他方法可以解决这个问题吗? / p>

2 个答案:

答案 0 :(得分:0)

我正在使用Busboy用于带有express.js的REST应用程序来处理文件上传,在multipart / form-data中它运行正常。

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

答案 1 :(得分:0)

它(排序)取决于客户。

AFAIK,通过multipart/form-data元素(通过浏览器)上传的<form>部分未被输入:它们包含文字(字符串)内容(用于&#34;常规&#34;字段) )或二进制内容(对于&#34;文件&#34;字段)。

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

如果你正在使用像cURL这样的CLI客户端,你可以上传JSON&#34;文件&#34;作为单独的部分(解释here)。您仍然需要对传入的数据调用JSON.parse(),因为它仍将作为字符串传递。