发送大型json对象,因为响应需要很长时间才能表达

时间:2016-11-30 09:37:37

标签: node.js express

我正在使用:node,express,routing-controllers

当我尝试响应大型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")));
    })
}

我怎样才能以更好的方式解决它?

(我不会在延迟加载时使用)

2 个答案:

答案 0 :(得分:0)

如果在未从数据库中查询时相同的数据需要几秒钟,则可以安全地假设问题出在数据库查询中。

大多数数据库问题都可以通过适当的索引来解决。尝试独立运行查询,查看需要多长时间,然后添加相关索引,速度将急剧增加。在您的情况下,请记住,在将2.3Mb发送到客户端之前,您的查询需要从数据库中提取2.3Mb的数据。很可能,无论如何,你最好还是使用文件。

如果您确定数据库不是问题,请在代码中删除承诺,然后尝试:response.send(db.get('phones'))

答案 1 :(得分: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