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 這東西的代碼
|