Node.js:fs.readdir不返回由fs.writeFile写入的文件 我的应用程序

Node.js:fs.readdir不返回由fs.writeFile写入的文件 我的应用程序,node.js,file,asynchronous,Node.js,File,Asynchronous,一个简单的Node.js http服务器,通过调用POST/deploy在给定目录中创建文件。写入文件后,我想使用console.log列出该目录中的所有文件 要创建文件(POST/deploy),我调用: 回调将写入HTTP响应并使用以下命令列出文件: fs.readdir(some_directory, (err, files) => { files.forEach(file => { console.log(file); // Do so

一个简单的Node.js http服务器,通过调用
POST/deploy
在给定目录中创建文件。写入文件后,我想使用
console.log
列出该目录中的所有文件

要创建文件(
POST/deploy
),我调用:

回调将写入HTTP响应并使用以下命令列出文件:

fs.readdir(some_directory, (err, files) => {
    files.forEach(file => {
        console.log(file);
        // Do something with the file
    }
}
我的问题 回调中未列出新文件。只有在再次调用deploy后,才会列出上一个文件。例如,如果我连续使用
/deploy
创建文件
a
b
,则
a
仅在创建
b
时列出,而
b
在我再次调用之前不会列出

我假设在调用回调时文件没有关闭,因此只有在关闭文件后,以后调用
fs.readdir
才能看到该文件

只有在文件正确关闭并且可以使用
fs.readdir
列出后,如何调用回调函数?

我试过什么
  • 阅读手册。它可以工作,但需要一个
    fd
    ,而不是文件名,因此我必须打开文件才能关闭它,这似乎很麻烦:

    打开(文件名'w',函数(错误,fd){ 写入(fd、内容、函数(错误、写入、缓冲区){ fs.close(fd,回调(null,{'newFile':filename}));
    }); });

  • 在SO中寻找类似问题


    • 我认为这是你的问题:

      fs.writeFile(filename, content, 'utf8', callback(null, {'newFile': filename})); 
      
      在上面的代码中,您可以立即运行回调,而不必等待操作完成。只有当您对
      回调(null,{'newFile':filename})
      的调用实际返回了一个函数作为回调调用时,它才会起作用,我怀疑它是否会这样做

      这可能有助于:

      fs.writeFile(filename, content, 'utf8', () => callback(null, {'newFile': filename})); 
      
      因为这里的
      回调()
      将在写入操作完成后调用。但这仍然不够,因为您需要处理错误:

      fs.writeFile(filename, content, 'utf8', (err) => {
        if (err) {
          // handle possible errors
        } else {
          callback(null, {'newFile': filename});
        }
      });
      
      e、 g.如果您的
      回调
      可以将错误作为第一个参数,您可以执行以下操作:

      fs.writeFile(filename, content, 'utf8', (err) => {
        if (err) {
          callback(err);
        } else {
          callback(null, {'newFile': filename});
        }
      });
      
      或者提前返回,您可以避免
      其他

      fs.writeFile(filename, content, 'utf8', (err) => {
        if (err) {
          return callback(err);
        }
        callback(null, {'newFile': filename});
      });
      

      回叫看起来可疑。似乎您已经在
      fs.writefile
      上调用了回调函数,而让函数调用您。Ba-Bam!像个忍者一样把它钉死了。谢谢关于这些错误——我正在自学一些Node.js的基础知识,所以我现在可以忽略它们——它们并不是我想要实现的目标。
      fs.writeFile(filename, content, 'utf8', (err) => {
        if (err) {
          return callback(err);
        }
        callback(null, {'newFile': filename});
      });