使用 express JS 生成和下载 CSV 文件
在处理节点 JS 项目时,我需要从数据库中提取某些数据并在 CSV 文件中表示值,本指南旨在简化创建 CSV 文件的过程并使其可从客户端下载。
先决条件
- 使用 express JS 的知识。
- 工作数据库设置。
对于本教程,我将使用带有 Sequelize ORM 的 PostgreSQL(数据库/ORM 类型实际上并不重要),json2Csv
npm 包是我选择的将 JSON 解析为 CSV 数据的包,因为它简单且易于使用。其他可用的 npm 包有fast-csv
,csv-parse
。
客观的
使用 API 端点将用户数据(名字、姓氏、电子邮件)下载为 CSV 文件/download
。
步骤
- 效用函数
- 在控制器中使用辅助函数
效用函数
yarn add json2csv
使用或安装包npm i json2csv
,完成后,我们将使用 提供的解析器同步 API json2Csv
。
util.js
import { Parser } from 'json2csv';
export const downloadResource = (res, fileName, fields, data) => {
const json2csv = new Parser({ fields });
const csv = json2csv.parse(data);
res.header('Content-Type', 'text/csv');
res.attachment(fileName);
return res.send(csv);
}
downloadResource函数参数;
- res:这是来自 API 端点的响应。
- fileName:要下载的生成的 CSV 文件的名称。
- fields:这是一个对象数组,具有多种功能,包括指定从发送的数据中解析哪些值、为每列添加自定义标题等。注意:在本教程中,我们将提供字段,但字段是可选的,在定义解析器实例时,它可以接受空参数(即
new Parser()
)。对象的键(即label
、value
)将用于为 CSV 文件提供结构。 - 数据:这是一个对象数组,表示要填充到 CSV 文件中的数据,注意:这是为了匹配指定的字段。
在实用函数中,将标头设置Content-type
为 ,text/csv
以便客户端能够识别发送的数据类型以及如何处理这些数据,将 设置attachment
为所选的文件名,最后使用res.send
解析后的 CSV 数据作为参数返回响应。这样,我们的实用函数就准备好了。
在控制器中使用辅助函数
为下载route.js创建新的路由
import express from 'express';
import userController from './controllers/userController';
const router = express.Router();
router.get('/download', userController.download);
// rest of express configs
创建新的控制器下载方法
userController.js
import { users } from '../models';
import { downloadResource } from '../util';
const controller = {};
controller.download = async (req, res) => {
const fields = [
{
label: 'First Name',
value: 'first_name'
},
{
label: 'Last Name',
value: 'last_name'
},
{
label: 'Email Address',
value: 'email_address'
}
];
const data = await users.findAll();
return downloadResource(res, 'users.csv', fields, data);
}
export default controller;
测试实施
运行本地服务器并在客户端浏览器中打开带有下载端点路径的链接(例如http://localhost:3000/api/download
),然后使用本地下载管理器下载文件。
结论
有趣的是,这是我在 dev.to 🎉 上的第一篇文章。我是 David Okonji,一位驻扎在尼日利亚拉各斯的软件工程师,非常欢迎大家提供反馈。谢谢!
鏂囩珷鏉ユ簮锛�https://dev.to/davidokonji/generate-and-downloading-csv-files-using-express-js-1o4i