javascript - 无法写入文件 NodeJS

标签 javascript node.js express fs

我以前已经能够以几乎完全相同的方式写入文件,但是现在它给我带来了麻烦。我循环执行此函数,重置在函数末尾删除的变量(请参见下面的代码)。调用此函数的循环成功运行 3-9 次,然后总是在写入文件时中断并出现以下错误:

Error: ENOENT: no such file or directory, open 'screenshots/item4/record/record.html'

注意:它并不总是 item4。

目录总是创建成功,但有时文件无法写入。这是代码:

async function save_and_erase() {
  let path = await 'screenshots/item'+recordCount;
  await makeDirectory(path);
  await makeDirectory(path+'/base');
  await makeDirectory(path+'/record');
  await saveFile(path+'/base/base.html',storage['index_html']);
  await saveFile(path+'/base/base.png',storage['index_screenshot']);
  await saveFile(path+'/record/record.html',storage['record_html']);
  await saveFile(path+'/record/record.png',storage['record_screenshot']);
  await delete storage['record_html'];
  await delete storage['record_screenshot'];
  await recordCount++;
};
async function makeDirectory(path) {
    mkdirp(path, function(err) {
        if (err) throw err;
    });
};
async function saveFile(path, content) {
    await fs.writeFile(path, content, (err) => {
        if (err) throw err;
    });
};

最佳答案

@Heretic 的评论明确提到 writeFile 默认情况下不返回 Promise 对象。

如果您使用的是最新版本的 Node,您可以查看 util 库来 promise 您的功能

否则,按如下方式更改函数即可解决问题:

function makeDirectory(path) {
    return new Promise((resolve, reject) => {
        mkdirp(path, function(err) {
            if (err) return reject(err);
            return resolve();
        }); 
    })
};
function saveFile(path, content) {
    return new Promise((resolve, reject) => {
        fs.writeFile(path, content, (err) => {
            if (err) return reject(err);
            return resolve();
        });
    })
};



请注意,您只能await返回promise的函数。因此,您不需要 await 来进行删除和增量操作

关于javascript - 无法写入文件 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427622/

相关文章:

javascript - 单击第二个按钮后服务器端的隐藏字段会更新

javascript - 从 json 文件加入时添加角色 (autorole)

javascript - TypeError : driver. isElementPresent 不是函数

node.js - deserializeUser 被客户端 requirejs 应用多次调用

html - 仅应用 Node js html 中第一个包含的 css 文件

javascript - 我无法转到 wwwroot ASP.NET 和 React.js 上的页面

javascript - 每个 then() 应该返回一个值或抛出 Promise/Always-return

javascript - Express.js : capture generic routes with numeric Id

node.js - 如何使用 typescript 解决 lerna monorepo 中的 Sequelize 和 Angular 之间的冲突?

javascript - 错误 NodeJS : Cannot get