Node.js:fs.readdir不返回由fs.writeFile写入的文件 我的应用程序
一个简单的Node.js http服务器,通过调用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
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
列出后,如何调用回调函数?
我试过什么
- 阅读手册。它可以工作,但需要一个
,而不是文件名,因此我必须打开文件才能关闭它,这似乎很麻烦: 打开(文件名'w',函数(错误,fd){ 写入(fd、内容、函数(错误、写入、缓冲区){ fs.close(fd,回调(null,{'newFile':filename}));fd
}); }); - 在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});
});