2016-11-30 47 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