2016-11-30 124 views
0

很長一段時間我使用:節點,快遞,路由控制器發送大JSON對象作爲響應是發生在快遞

當我嘗試響應大JSON對象,它需要比60年代多。 有我的代碼:

@Get("/") 
getAll() { 
    return db.get('phones') 
} 

如果我響應相同JSON文件,只需要幾秒鐘。 有我的代碼:

@Get("/") 
getAll(@Req() request: any, @Res() response: any) { 
    return new Promise((resolve, reject) => { 
      return (response.sendFile(path.resolve(__dirname, "../../db/phones.json"))); 
    }) 
} 

我怎樣才能解決這個問題的一個更好的辦法?

(我不慣於在延遲加載使用)

+0

該文件有多大? – xShirase

+0

它只是你的數據庫運行緩慢的查詢或低連接速度? – iKoala

+0

爲什麼你把它包裝在一個承諾?只需返回response.sendFile(路徑....) –

回答

0

如果相同的數據需要幾秒鐘時,不從數據庫查詢,它是安全的假設,問題在於你的數據庫查詢。

大部分數據庫問題都可以通過適當的索引來解決。嘗試獨立運行查詢,查看需要多長時間,然後添加相關索引,並且速度將顯着增加。在你的情況下,請記住,在將這些2.3Mb發送到客戶端之前,你的查詢需要從db中獲取2.3Mb的OUT數據。無論如何,你最好還是用文件。

如果你是確保DB不是問題,拿在你的代碼擺脫的承諾,並嘗試:response.send(db.get('phones'))

+0

不,沒有數據庫問題。我檢查了它。 – yantrab

+0

db查詢返回多長時間? – xShirase

0

xShirase解決我的問題。 還有就是我的新代碼:

@Get("/") 
getAll(@Req() request: any, @Res() response: any) { 
    return new Promise((resolve, reject) => { 
    db.get('phones').then(phones => { 
     response.send(phones)}) 
    }) 
} 

我只是用從https://github.com/pleerock/routing-controllers的例子。

enter image description here