1

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

我发现所有的 '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);
});

我总是得到“字符串”,我期待控制台中的布尔值,因为那是客户端发送的。

现在,如果内容类型设置为“应用程序/json”,它可以正常工作

我知道正文解析器不适用于“多部分”内容类型。但那我有什么选择呢?我尝试了多方和多方。但是使用它们进行解析后,我仍然将字段作为字符串。

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

4

2 回答 2

0

它(有点)取决于客户。

AFAIK,multipart/form-data通过元素(通过浏览器)上传的部分<form>没有输入:它们包含文本(字符串)内容(用于“常规”字段)或二进制内容(用于“文件”字段)。

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

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

于 2015-11-02T21:20:55.763 回答
0

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

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

于 2015-11-02T21:14:11.293 回答