You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用objects-to-csv导出CSV报错TypeError: fs.existsSync is not a function

报错原因

TypeError: fs.existsSync is not a function 报错的核心原因是运行环境不匹配:

  • objects-to-csv 库的 toDisk 方法底层依赖Node.js内置的fs(文件系统)模块,该模块是Node服务端环境独有的系统API,浏览器出于安全沙箱限制,不提供直接操作用户本地磁盘的能力,自然不存在fs.existsSync方法。
  • 你当前把CSV写入逻辑写在了前端组件的方法中,这段代码最终会被打包后在用户的浏览器环境执行,根本无法调用Node端的文件系统能力,点击按钮触发逻辑时就会抛出该错误。
解决方案

根据你的实际需求二选一即可:

场景1:纯前端项目,需要点击按钮直接下载CSV到用户本地

不需要调用toDisk写磁盘方法,改用库生成CSV字符串的能力,在前端通过Blob对象触发浏览器原生下载即可,修改后的代码如下:

const ObjectsToCsv = require('objects-to-csv');

export default {
    data () {
        return {
            tableData: [
                {code: 'CA', name: 'California'},
                {code: 'TX', name: 'Texas'},
                {code: 'NY', name: 'New York'},
            ],
        }
    },
    methods: {
        async exportData(){
            const csv = new ObjectsToCsv(this.tableData);
            // 生成CSV格式字符串,不调用服务端专属的磁盘写入方法
            const csvString = await csv.toString();
            // 构造Blob触发浏览器下载
            const blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' });
            const tempLink = document.createElement('a');
            tempLink.href = URL.createObjectURL(blob);
            tempLink.download = 'file.csv';
            document.body.appendChild(tempLink);
            tempLink.click();
            document.body.removeChild(tempLink);
            URL.revokeObjectURL(tempLink.href);
            console.log('导出成功')
        },
    }
}

注意:原代码中data返回值里的属性名也叫data,容易和Vue组件本身的data选项产生命名冲突,上面示例里已经改名为tableData。

场景2:需要把CSV文件写入服务端本地磁盘

将toDisk相关的CSV生成、文件写入逻辑全部迁移到Node.js服务端的接口中实现,前端点击按钮时只需要发起请求调用对应接口,由服务端完成文件写入操作即可,不要把这段依赖Node API的逻辑放在前端组件代码中执行。

内容的提问来源于stack exchange,提问作者Barre Mathis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:06:17