React 使用fromidable 模組進行檔案上傳出現First argument must be a string 的解析錯誤的原因
前幾日在用react + express做網站檔案上傳模組時採用了常用的幾個後臺處理檔案上傳的模組,幾乎每個都會出現上述錯誤,究其原因,以如下程式碼進行除錯測試
//錯誤提示除錯
//new一個formidable.IncomingForm();
var form = new formidable.IncomingForm();
//設定臨時檔案存放的路徑
form.uploadDir = "public/";
//設定上傳資料的編碼
form.encoding='utf-8';
//設定是否保持上傳檔案的拓展名
form.keepExtensions = true;
form.on('error', function(err) {
console.log('errr!!!!!!!!!!!!!!');
res.write('xxxx');
res.end();
}
form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:\n\n');
res.end();
});
此時看到
Can't set headers after they are sent,因為react的做法是以元件的形式進行開發的,所以將上傳檔案那塊html直接放在html頁面中就不會出錯,react 寫法如下:
return(<div>
<AppMenu/>
<h1>檔案上傳</h1>
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="text" name="text"/>
<br/><br/>
<input type="text" name="ss"/>
<br/><br/>
<input type="file" name="f"/>
<br/><br/>
<input type="submit" value="提交"/>
</form>
</div>
)
初步懷疑此return 出錯,上傳模組以前以為是不相容的問題,我express是4.13.4,算是新版本了,找到了問題所在再繼續解決,以此作為題記,後續會補充解決方案.