我有这个从客户端解析数据这个奇怪的问题。
我发现所有'布尔值为真'转换为'字符串为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>
答案 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()
,因为它仍将作为字符串传递。