相关阅读:在JavaScript应用中将CSV转换为JSON
在做一个Node JS项目的时候,我需要从数据库中提取某些数据,并在CSV文件中表示数值,本指南旨在简化创建CSV文件的过程,并使其可以从客户端下载。
先决条件
- 使用Express JS的知识。
- 一个工作的数据库设置。
在本教程中,我会使用PostgreSQL与Sequelize ORM(数据库/ORM类型其实并不重要),json2Csv npm包是我解析JSON到CSV数据的首选包,因为它简单易用。其他可以使用的npm软件包是 fast-csv,csv-parse。
目标
使用API端点 /download 将用户数据(名、姓、电子邮件)下载为CSV文件。
步骤
- 实用函数
- 使用控制器中的帮助函数
/ 实用函数 /
使用 yarn add json2csv 或 npm i json2csv 安装包,安装完成后,我们将使用 json2Csv 给出的解析器同步API。
utils
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。这是一个对象数组,它有很多功能,包括指定从发送的数据中解析出哪些值,给每一列提供一个自定义的头等。
- data。这是一个对象数组,表示要在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),然后您的文件就会使用本地下载管理器下载。