connect-form 上傳文件失敗


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
如果失敗的情況是: 無限迴圈 Loop/一直保持空白
這問題記錄於推特上,但由於推特字數有限,所以補充和記錄一下:

1. 東西是由 ExpressJS Framework 來開發
2. 又用了 connect-form 上傳檔案

最終在追查和測試過程中發現,發生這情況的原因是:
- 用了自家制的 middleware(中間件) 而導致的

既然知道問題就來問問大神
原來在六月份已有人提出過,於根據找到的討論文中提示,得到真正原因是:
- 自制的 middleware(中間件) 內的 Async Function 發生了 Losting data event.
- 使到 req.form.complete(function) 一直沒收到觸發事件,導致了交接不能
- 而我的 Async Function 主要是用於檢查用戶已登入,並在登入後取得他的個人資料
- 簡單來說是於 MongoDB 中取得用戶資料,而這個讀取用作是 ASync 來的

所以解決方法就是使自制的 middleware(中間件) 在得到結果後才繼續執行後續動作就解題了

再於討論串中向下翻有人提到可以參考 connect 套件中裡 utils.js 的 pause() 函數
於是再去追查套件,那就得到了真相,一如 pause() 的例子:

var pause = utils.pause(req);
fs.readFile(path, function(){
next();
pause.resume();
});

最後最後將上面的 pause 放到自制的 middleware(中間件) 就大功告成了
當然有空也應該來看看 connect 這東西的代碼
參考: