Nodejs + expressjs + node-formidable 拋異常?

William Xing發表於2013-04-23

當我們的 Nodejs + expressjs 專案需要從客戶端向伺服器端上傳檔案的時候,node-formidable往往是開發者的首選(下面我會解釋,這是錯誤的判斷)。於是我像node-formidable提供的例子一樣,寫了線面的程式碼:

app.post('/', function(req, res, next){
    // parse a file upload
    var form = new formidable.IncomingForm();

    form.parse(req, function(err, fields, files) {
      if (err) return next(err);
      res.send(200, util.inspect({fields: fields, files: files}));
    });
});

但是,form.parse就是拋異常,後來Googling一下才知道,expressjs已經包括node-formidable(更準確的說是connect包括node-formidable),所以傳過來的req已經分析過了,所有的檔案資訊已經在req.files裡了,異常是因為試圖二次解析form。這裡有expressjs自己的例子

當然不要忘了下面這句話:

app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/my/files' }));

否則檔名就會變成這樣"/tmp/8ef9c52abe857867fd0a4e9a819d1876",並且丟失了副檔名。

以上的教訓就是還是對expressjs不夠熟悉,如果npm list一下的話,馬上就能看到formidable了。歡迎大家交流指教,謝謝.

相關文章