2017-01-16 114 views
1

有點新的節點和打字稿,所以需要一點幫助。 使用節點/快遞/ postres作爲後端和https://github.com/typeorm/typeorm作爲ORM其中有一個功能,打開連接,看起來像:節點路由響應沒有設置

export declare function createConnection(): Promise<Connection>; 

所以,當我想用​​在我的路線,它看起來就像是:

this.app.get("/test", function (req, res) { 

     createConnection() 
      .then(conn => { 
       console.log("Start connection..."); 
       let repo = conn.getRepository(entForum); 

       let obj = repo.find(); 
       conn.close().catch(err => { }); 
       return obj; 
      }) 
      .then(data => { 
       res.send(data); 
      }); 

     console.log("Done"); 
    }); 

和控制檯輸出爲:

Done 
GET /test/ 200 51.053 ms - 1133 
Start connection... 

的問題是我收到「無法設置頭髮送之後。」。 它看起來像在console.log(「DONE」);之後發送響應。然後再承諾一次。 我在這裏做錯了什麼?

+0

如果你在那裏歸還整個承諾會怎樣?並刪除co​​nsole.log(「完成」);. '返回createConnection()。然後//等等等等' 很確定,因爲你沒有返回承諾,它會在數據庫調用完成之前完成請求。 – Steveadoo

+0

不知道在發送它們之後無法設置標題位,但是您的承諾在完成之後執行,因爲您沒有正確地將它們綁定在一起。你需要添加一個最終的'.then(()=> console.log(「DONE」))' – Paarth

+2

這個錯誤通常是我異常處理異步操作引起的,但如果這真的是你所有的代碼,在這裏沒有看到任何明顯的問題,因爲只有一個地方發送迴應。你確定你真正的路由處理程序中沒有更多的代碼嗎?你確定問題是由這個路由處理程序引起的嗎?僅供參考,在正常的路由處理程序中,您不會聲明'next'參數,因爲它只能用於中間件,而不能用於端點處理程序。 – jfriend00

回答

0

好的,發現了什麼是錯的。原來的問題是承諾後的這段代碼 - console.log("Done");

如果我刪除它,一切正常。

+0

如果'console.log(「Done」);'確實向控制檯輸出了'Done',那麼移除它就可以解決問題是沒有意義的,只要它會拋出錯誤,那麼它可能是原因。 –