【问题标题】:Filesystem doesn't want to write a specific file in Node.js文件系统不想在 Node.js 中写入特定文件
【发布时间】:2020-09-02 04:37:55
【问题描述】:
console.log(`./settings/${mob.serverName}/${mob.channelName}.json`); // ./settings/Mobbot Test Server/mobtimusprime.json
fsp.writeFile(`./settings/${mob.serverName}/newfile.json`, settings); // actually creates the right file, in the right path
console.log(fs.existsSync(`./settings/${mob.serverName}`)); // true
fsp.writeFile(`./settings/${mob.serverName}/${mob.channelName}.json`, settings); // does nothing, doesn't throw an error, just does absolutely nothing.

我不知道发生了什么,我已经检查了多次拼写,但一切似乎应该工作,但没有。

附加信息: node -v // v14.2.0
窗户 10

顺便说一句:

const fsp = require('fs').promises;

如果这不是很明显。

编辑: 这更像是我正在尝试做的事情(当然,显示问题所需的最少代码)。

const myFunc = async (settings) => {
  try {
    return await fsp.writeFile(`./settings/${mob.serverName}/${mob.channelName}.json`, settings);
  } catch (e) {
    console.log(e)
  }
}

编辑 2:

更多上下文:

const settingsUpdater = async (settings) => {
  try {
    return await fsp.writeFile(`./settings/${mob.serverName}/${mob.channelName}.json`, settings);
  } catch (e) {
    console.log(e)
  }
}

const callingFunction = async (...args) {
  try {
    await settingsUpdater(settings);
    const { pieceOfUpdatedSettings } = require(`../settings/${mob.serverName}/${mob.channelName}.json`);
    anotherFunction(pieceOfUpdatedSettings); 
  } catch (e) {
    console.log(e)
 }
}

【问题讨论】:

  • 您能补充更多信息吗?当您说文件系统不想写时,实际上发生了什么?你有错误吗?
  • 我没有收到任何错误,代码继续运行,就好像什么都没发生一样,并且文件没有被创建或更新。
  • 感谢您更新问题。我无法想象是什么原因造成的。只是 FWIW(与具体问题无关),不需要 return await,从 async 函数返回的值总是有效的 awaited(例如,只需 return 就足够了)。 return await used 导致函数的结算需要一个额外的异步滴答,但 ES2019 修复了该问题(对于本机承诺)。还强烈建议不要使用undefined 将拒绝转换为解决方案,catch 块就是这样做的。 :-) 希望你能找到问题!
  • 感谢您的提示,所以您是说我不应该有一个 catch 块?
  • 我不推荐使用 catch 块和异步函数。如果你想读取一个带有 Promise 的文件,它会是:const fs = require('fs')fs.readFile(path).then(res => { processing response... }).catch(err => { processing error... });。您还可以使用回调。希望对您有所帮助。

标签: javascript node.js fs


【解决方案1】:

类似的东西?

const fs = require('fs');
const path = './path/to/file'
const data = 'yourdata'

fs.appendFile(path, data, (err) => {
    if err console.log(err);
});

fs.appendFile() 将创建一个不存在的文件,或者重写一个文件。 我在这里使用了回调,但你也可以使用fs 的同步函数,而不是异步函数,如下所示:

try {
    fs.appendFileSync(path, data);
} catch (err) {
    console.log(err);
}

Fs 文档:https://nodejs.org/api/fs.html

【讨论】:

  • 不能覆盖文件? existsSync 就在那里,所以我可以证明路径确实存在,它不是我想要制作的实际代码的一部分。我真正想要的唯一一行是最后一行,其他行只是为了修复错误。 > 将数据异步写入文件,如果文件已存在则替换该文件。数据可以是字符串或缓冲区。成功后,Promise 将在没有参数的情况下解决。
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 2020-02-17
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2016-07-08
  • 1970-01-01
相关资源
最近更新 更多