1. 程式人生 > >React 使用fromidable 模組進行檔案上傳出現First argument must be a string 的解析錯誤的原因

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,算是新版本了,找到了問題所在再繼續解決,以此作為題記,後續會補充解決方案.