【问题标题】:Checking if writeFileSync successfully wrote the file检查 writeFileSync 是否成功写入文件
【发布时间】:2013-03-10 17:01:46
【问题描述】:

我有一个用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
};

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    根据 node.js source-code fs.writeFileSync 不返回任何内容。

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

    【讨论】:

    • 我的代码没有抛出任何错误,甚至没有创建文件。 fs.writeFileSync(__dirname+"./../BusinessNames/currentDB.txt", 'nul.vyp'); .未创建文件,因为 nul 是 windows 中的保留关键字
    • 我的代码生成错误:未定义但文件创建正确。这个错误完全是多余的..
    【解决方案2】:

    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');
      }
    }
    

    【讨论】:

    • 异步版本不能很好地与 HTTP 响应一起使用,这就是我采用同步方式的原因。
    • 我跳过了第三个参数... :(
    • @jolt 我知道我迟到了,但我认为将它们用于 HTTP 请求并没有什么问题。您需要做的就是在“成功”回调中进行其他操作。
    【解决方案3】:

     fs.exists(file, function (exists) {
      if (exists) {
        fs.writeFiles(file, content,  err=> {
          if (err)   res.status(500).send({error: "failed to save"});
           else    res.status(200).send({message : "succeeded in saving"});
      } else {
        res.status(404).send({error: "file not exists"})
      }
    }

    使用异步而不是同步。这将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多