写入大字符串至文件时遇TypeError: fs.writeFilSync未定义错误求助
问题分析与解决方案
嘿,你的问题其实很好解决,我帮你拆解一下:
1. 核心错误:低级拼写失误
错误日志里的TypeError: fs.writeFilSync is not a function已经把问题点明了——你把writeFileSync拼写成了writeFilSync,少了一个字母e!这是直接导致报错的元凶。
2. 额外需要调整的细节
除了拼写错误,代码里还有两个小问题需要修正:
- 你引入的是
fs.promises,但writeFileSync是原生fs模块的同步方法,并不在fs.promises对象中; - 代码里的
console.log("Done writing:", result);中的result变量根本没定义,执行到这里会触发新的报错。
修复后的代码方案
我给你两种可选的修复方案,你可以根据自己的代码风格选择:
方案一:继续使用同步写入(修正拼写+调整fs引入)
如果想保留同步写法,需要直接引入原生fs模块,而非promises版本:
const csv = require("csvtojson"); var jsonexport = require('jsonexport'); const fs = require("fs"); // 改为引入原生fs模块 const saveJsonToCSV = jsonObj => { jsonexport(jsonObj, function (err, csv) { if (err) return console.log(err); console.log("Length", csv.length); var path = appDir + "\\csv\\" +"test.csv"; try { fs.writeFileSync(path, csv); // 修正拼写错误 console.log("Done writing:", path); // 把未定义的result换成实际的path } catch (error) { console.error(error); } }); return false; }
方案二:改用异步写入(适配fs.promises风格)
如果想遵循现代异步/Promise的写法,可以把整个逻辑改成async/await风格,让代码更整洁:
const csv = require("csvtojson"); const jsonexport = require('jsonexport'); const fs = require("fs").promises; const saveJsonToCSV = async (jsonObj) => { // 标记为async函数 try { const csvContent = await jsonexport(jsonObj); // 用await获取csv内容 console.log("Length", csvContent.length); const path = `${appDir}\\csv\\test.csv`; // 用模板字符串简化路径拼接 await fs.writeFile(path, csvContent); // 异步写入文件 console.log("Done writing:", path); } catch (error) { console.error(error); } return false; }
关于空文件的原因
当你调用了不存在的writeFilSync函数时,代码直接进入catch块,此时文件系统可能已经提前创建了空文件(部分写入操作会先初始化空文件再写入内容),但实际内容并没有被写入,所以最终得到的是空文件。
内容的提问来源于stack exchange,提问作者user2130951
相关产品推荐
相关产品推荐

