检查writeFileSync是否成功写入了该文件

jol*_*olt 53 javascript node.js

我有一个简单的路由定义express.js:

exports.save = function (request, response)
{
    var file = request.body.file;
    var content = request.body.content;

    var saved = false;

    if (fs.existsSync( file ))
    {
        saved = fs.writeFileSync(file, content, 'utf8');
    }

    console.log( saved ); // undefined or false, never true

    response.send(saved ? 200 : 500, saved ? 'saved' : 'error'); // 500, error
};
Run Code Online (Sandbox Code Playgroud)

if (typeof saved === 'undefined') saved = true;唯一的选择吗?感觉hacky.

far*_*jad 78

根据node.js 源代码 fs.writeFileSync不返回任何内容.

Error如果出现问题,它会抛出一个对象.所以你应该fs.writeFileSync(file, content, 'utf8');在一个try-catch块内写.

  • 我的代码没有抛出任何错误,甚至没有创建文件。fs.writeFileSync(__dirname+"./../BusinessNames/currentDB.txt", 'nul.vyp'); . 不创建文件,因为 nul 是 Windows 中的保留关键字 (2认同)

Shu*_*ing 9

fs.writeFileSync不返回任何值,如果没有异常发生则意味着保存成功; 否则失败.

您可能想要尝试异步版本的文件读取

fs.exists(file, function (exists) {
  if (exists) {
    fs.writeFiles(file, content, 'utf-8', function (err) {
      if (err) {
        response.send("failed to save");
      } else {
        response.send("succeeded in saving");
      }
  } else {
    console.log('file does not exists');
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 异步版本与HTTP响应不能很好地结合,这就是我采用同步方式的原因. (2认同)
  • @jolt我知道我参加聚会很晚,但是使用HTTP请求使用它们并没有发现任何问题。您需要做的就是在“成功”回调中执行其他操作。 (2认同)