node.js - 如何使用 node.js 和 react.js 下载大型 CSV 文件
问题描述
我想通过 node.js 以 CSV 格式下载 Mongo 集合(有大量记录)。
目前我所做的是,我首先将数据加载到节点中,然后在处理它们之后解决承诺。对于小型收藏,这很好用。但是当记录数越来越多时,它会在很长一段时间后返回 502 错误。做这个的最好方式是什么?
解决方案
这是一个基本的代码spinet,它帮助我解决了上述问题。
const collection = ... ;
const query = ... ;
const select = ... ;
const cursor = mongodb.collection(collection).find(query, select)
var csv = require('csv');
transfer(doc) {
return {
Address: doc.address,
State: doc.state.abbreviation
};
}
function(req, resp) {
const cursor = ...
// The transfer function (above)
const transfer = ...;
const fileName = "Download.csv";
resp.setHeader('Content-disposition', `attachment; fileame=${fileName}`);
resp.writeHead(200, { 'Content-Type': 'text/csv' });
resp.flushHeaders();
// Stream the query result
cursor.stream()
.pipe(csv.transfer(transformer))
.pipe(csv.stringify({header: true}))
.pipe(resp)
}
推荐阅读
- javascript - 使用 reducer 递归更新 Redux 存储
- go - Go 中的类型转换结构是无操作的吗?
- ckeditor - 如何在 TYPO3 的 CKEditor 中提供详细信息/摘要 HTML 元素?
- r - R dplyr mutate_at 访问列名
- maxscale - MaxScale 尝试对所有服务器中的用户进行身份验证
- mysql - 基于子查询获取表中的常用值
- python - Tkinter:如何使用文本小部件从用户那里获取书面文本并将它们打印成多行?
- docker - 在 docker 命令“docker run -v $(pwd):/app rasa/rasa:1.10.8-full init --no-prompt”中访问目录?
- c# - 通过 InterfaceMapping 从 TargetMethod 获取 InterfaceMethod-pendant
- python - 用 PyQt5 绘制多点曲线