使

使用 express JS 生成和下载 CSV 文件

2025-06-08

使用 express JS 生成和下载 CSV 文件

在处理节点 JS 项目时,我需要从数据库中提取某些数据并在 CSV 文件中表示值,本指南旨在简化创建 CSV 文件的过程并使其可从客户端下载。

先决条件

  • 使用 express JS 的知识。
  • 工作数据库设置。

对于本教程,我将使用带有 Sequelize ORM 的 PostgreSQL(数据库/ORM 类型实际上并不重要),json2Csvnpm 包是我选择的将 JSON 解析为 CSV 数据的包,因为它简单且易于使用。其他可用的 npm 包有fast-csvcsv-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);
}
Enter fullscreen mode Exit fullscreen mode

downloadResource函数参数;

  • res:这是来自 API 端点的响应。
  • fileName:要下载的生成的 CSV 文件的名称。
  • fields:这是一个对象数组,具有多种功能,包括指定从发送的数据中解析哪些值、为每列添加自定义标题等。注意:在本教程中,我们将提供字段,但字段是可选的,在定义解析器实例时,它可以接受空参数(即new Parser())。对象的键(即labelvalue)将用于为 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
Enter fullscreen mode Exit fullscreen mode

创建新的控制器下载方法
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;
Enter fullscreen mode Exit fullscreen mode

测试实施

运行本地服务器并在客户端浏览器中打开带有下载端点路径的链接(例如http://localhost:3000/api/download),然后使用本地下载管理器下载文件。

结论

有趣的是,这是我在 dev.to 🎉 上的第一篇文章。我是 David Okonji,一位驻扎在尼日利亚拉各斯的软件工程师,非常欢迎大家提供反馈。谢谢!

鏂囩珷鏉ユ簮锛�https://dev.to/davidokonji/generate-and-downloading-csv-files-using-express-js-1o4i
PREV
如何配置 Docker + VS Code 开发环境
NEXT
Redux 是模式的一半(2/2)