2015-11-02 64 views
1

我有這個奇怪的解析客戶端數據的問題。使用快遞解析'multipart-data'

我發現,所有的「邏輯真」轉變爲「字符串真實,同樣爲‘不確定’,因此我不能做一個‘如果’的那些領域。

以下是我有:

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

我總是得到「字符串」,我在控制檯期待布爾,因爲這是客戶端發送的內容。

現在,如果內容類型設置爲「應用/ JSON的」

我明白,身體解析器不會與「多」的內容類型的工作,它工作正常。但是,我的選擇是什麼?我嘗試了多方和多方。但後解析他們,我仍然得到字段的字符串。

難道就沒有別的辦法來處理這比寫一個小工具,它檢查的內容類型,然後做使用JSON.parse(「域」)或類似的東西報價的一些醜陋的剝離?

回答

0

我使用Busboy與express.js REST應用程序,來處理文件上傳,在多/表單數據和它的正常工作。

示例可在項目的頁面上找到。 只是一個警告,如果你需要處理的文件上傳,請確保您有對'finish'事件WriteableStream使用,以保存該文件的聽衆和你不通過打雜本身提出的'finish'事件完全依賴。

+0

沒有。這不起作用。它仍然是作爲'字符串'而不是布爾 – beNerd

0

它(分類)取決於客戶端。

AFAIK,multipart/form-data通過<form>元素(通過瀏覽器)上傳的零件不包含文本(字符串)內容(用於「常規」字段)或二進制內容(用於「文件」字段)。

換句話說,所有的服務器端解析器會爲您提供的字段將是字符串。沒有一些明確的代碼,multer/multiparty/etc不知道字符串值true是否是一個布爾值,所以你將不得不自己執行一些轉換/轉換,這是基於每個字段應該是什麼樣的知識包含。

如果您使用的是CLI客戶端一樣捲曲,你可以上傳JSON「文件」作爲獨立的部分(解釋here)。您仍然需要在傳入的數據上調用JSON.parse(),因爲它仍將作爲字符串傳遞。

+0

那麼它通常如何處理?我試着在req.body上做JSON.parse,但是它失敗了,因爲req.body已經是一個JSON對象了 – beNerd

+0

@beNerd你需要文件上傳功能嗎?如果是這樣,你會被'multipart/formdata'卡住。如果沒有,你可以直接使用['body-parser'](https://github.com/expressjs/body-parser)作爲JSON上傳('req.body'將是_parsed_對象) – robertklep

+0

我確實需要文件上傳,但它在我的表單中有點可選。我使用body-parser,但是我遇到了true/false/undefined值的問題。所有這些都轉換爲字符串,我不能做任何比較服務器端。 – beNerd