【问题标题】:Node.js fs.writeFile() not creating new files?Node.js fs.writeFile() 没有创建新文件?
【发布时间】:2020-01-04 16:24:35
【问题描述】:

我需要为我正在尝试开发的系统创建许多 .json 文件。为此,我对所需的文件名运行了一个 for 循环,然后使用 fs.writeFileSync('filename.json', [data])

但是,稍后尝试打开它们时,当我尝试在项目文件夹中找到它们时,我无法在任何地方找到它们。

我尝试使用一个不太复杂的名称来编写,并且应该与我的脚本出现在同一目录中,但这也没有结果。据我了解,即使我的文件名不是我预期的那样,我至少应该在某个地方得到一些东西,但我最终什么都没有改变。

我当前的代码如下所示:

function addEmptyDeparture(date) {
fs.readFileSync(
        __dirname + '/reservations/templates/wkend_dep_template.json',
      (err, data) => {
        if (err) throw err
        fs.writeFileSync(
            getDepartureFileName(date),
            data
        )
      }
    )
}

function getDepartureFileName(date){
    return __dirname + '/reservations/' +
    date.getFullYear() +
    '/departing/' +
    (date.getMonth() + 1).toString().padStart(2, "0") +
    date.getDate().toString().padStart(2, "0") +
    '.json'
}

其中data 是从 fs.readFileSync() 返回的 JSON 对象,并立即写入 fs.writeFileSync()。我认为我不需要对它进行字符串化,因为它已经是一个 JSON 对象,但我可能错了。

我认为它根本不起作用的唯一原因(而不是根本没有出现在我的项目中)是,在代码的后面部分,我们有这个:

    fs.readFileSync(
        getDepartureFileName(date)
      )
      .toString()

这是我因为没有该名称的文件而收到错误的地方。

还值得注意的是,date 是一个有效的日期对象,因为我能够在小提琴中测试该部分。

我对@9​​87654326@ 的效果有什么误解,或者这不是编写 .json 文件以在服务器上使用的最佳方式吗?

【问题讨论】:

  • 请显示您的代码的整个相关上下文。例如,您是否有完整的错误处理以便捕获并记录任何错误?这里关于代码的问题应该包括所有相关的代码和上下文。如果不查看实际代码,我们将无法帮助您修复代码。我们无法猜测您的代码是什么样的。是的,fs.writeFileSync() 在正确使用时会创建新文件,但显然您没有在正确的位置查找文件,或者您没有正确使用该功能。没有看到你的代码就无法判断!
  • 您的代码对fs.readFileSync() 使用了错误的参数。在文档中查找。它返回数据并且不使用回调。所以,你的fs.writeFileSync() 永远不会被调用。
  • 你使用了同步的 wrriteFileSync 函数,但尝试回调是错误的

标签: node.js json fs


【解决方案1】:

您可能忘记对数据进行字符串化:

fs.writeFileSync('x.json', JSON.stringify({id: 1}))

【讨论】:

  • 如果数据是直接来自 fs.readFile() 的 JSON 对象,是否需要对数据进行字符串化?对于不清楚的原始问题也很抱歉
  • 它必须是一个字符串,fs.readFile() 可能返回一个 Promise。设置调试器断点,以便您可以检查这些内容并确保它们符合您的预期。
【解决方案2】:

我尝试使用带有 writeFileSync() 的演示创建类似的案例,使用 for 循环创建不同的文件并将 json 数据添加到这些文件中。就我而言,它有效。每次创建一个新的文件名。这是我的 GitHub:-

var fs = require('fs'); 

// Use readFileSync() method 

// Store the result (return value) of this 
// method in a variable named readMe 
for(let i=0 ; i < 4 ; i++) {
var readMe = JSON.stringify({"data" : i});

fs.writeFileSync('writeMe' + i + '.json', readMe, "utf8");

}

// 存储内容并从中读取 // readMe.txt 到文件 WriteMe.txt

让我知道您是否一直在尝试这样做。

【讨论】:

  • 这如何回答 OP 的实际问题?这里的约定是我们让 OP 澄清他们的问题,以便我们可以看到他们的实际问题是什么,而不仅仅是发布我们不知道它们是否与 OP 遇到的实际问题相关的代码示例。您在胡乱猜测,不知道这是否相关。
  • 我已经实现了用户准确提到的用例及其工作。正如他所描述的,应该没有错误。用户可以从示例中验证相同的内容,也可以在自己的代码中使用它,因为所描述的场景已经实现,没有任何更改。
  • 问题是 OP 在他们的代码中做错了什么。你不知道你是否回答了这个问题,因为他们没有透露他们的代码。我们通常更愿意指导 OP 包含他们的实际代码,这样我们就可以更直接地帮助他们解决他们的具体问题,而不是猜测他们的问题可能是什么,或者尝试提供可能会或可能不会解决 OP 问题的通用教程。我们希望人们提出更好的问题,这样我们就有了好的、高质量的问题,然后可以得到好的、高质量的答案。这就是我想说的。
猜你喜欢
  • 2017-12-21
  • 2015-09-02
  • 2019-11-04
  • 2020-03-03
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多