我有一个提供大量数据的API。最初,该数据集是可管理的,但它每天都在增长,并开始陷入服务器瘫痪,并导致超时和响应缓慢。当前,API将整个响应加载到内存中,然后再发送给客户端。我想尽快发送响应。
我遵循了有关如何构造此API的在线指南, 从这里: https://www.freecodecamp.org/news/how-to-build-blazing-fast-rest-apis-with-node-js-mongodb-fastify-and-swagger-114e062db0c9/
我对其进行了修改以适合我的数据,并且效果很好。但是,我一直在尝试使其流式传输响应,并且坦率地碰壁。我似乎无法在网上采用很多示例,说明如何在我的代码中执行此操作。
这就是我要更改的内容。
// Get All Metars
exports.getmetars = async (req, reply) => {
try {
const flights = await metars.find()
return flights
} catch (err) {
throw boom.boomify(err)
}
}
此代码当前在发送之前将全部加载到RAM中。我该如何流式传输?
答案 0 :(得分:0)
您可以流式传输,但您可能还希望查看在端点上启用分页,过滤和/或排序。根据您链接的文章,我将假设您正在使用猫鼬。
看看这个streaming JSON.stringify package。自述文件的底部有一个Mongoose example。对您来说,它看起来像这样:
// Get All Metars
exports.getmetars = (req, reply) => {
try {
new JsonStreamStringify(metars.find().stream()).pipe(reply)
} catch (err) {
throw boom.boomify(err)
}
}
参考答案:https://stackoverflow.com/a/53852868/30697
另请参阅:Stream from a mongodb cursor to Express response in node.js