アップロードされたファイルを整理する必要があるアプリケーションを開発しています。このIDを取得するにはexpress-request-idを使用します)。Node.jsのfs.rename()をループ内で実行しているときにエラーが発生しました
問題は、1つ以上のファイルがあるたびに「移動」プロセスが失敗し、修正できないように見えることです。
let request_folder = path.resolve(tmp_folder + "/" + req.id);
/* Checking if the folder exists */
fs.access(request_folder, fs.constants.F_OK, function(error) {
if(error) { // it doesn't
/* Trying to create it */
fs.mkdir(request_folder, function(error) {
if(error) {
console.log("Error: Couldn't create the directory.");
console.log(error);
}
});
}
});
/* Moving uploaded files to their respective request folder */
req.files.forEach(function(file) {
let new_file_path = path.resolve(request_folder + "/" + file.filename);
fs.rename(file.path, new_file_path, function(error) {
if(error) {
console.log("Error: Couldn't move " + file.filename + ".");
console.log(error);
}
});
});
私は私が手に一度に2つのファイルを移動しようとすると、フォルダやファイルの両方が存在するが、私百パーセント確信している:
Error: Couldn't move Desert.jpg.
{ Error: ENOENT: no such file or directory, rename 'C:\Users\telmo.silva\csc-links\public\tmp\Desert.jpg' -> 'C:\Users\telmo.silva\csc-links\public\tmp\d2abf375-d09f-440c-a5ba-adf4f5725a73
\Desert.jpg'
errno: -4058,
code: 'ENOENT',
syscall: 'rename',
path: 'C:\\Users\\telmo.silva\\csc-links\\public\\tmp\\Desert.jpg',
dest: 'C:\\Users\\telmo.silva\\csc-links\\public\\tmp\\d2abf375-d09f-440c-a5ba-adf4f5725a73\\Desert.jpg' }
Error: Couldn't move Chrysanthemum.jpg.
{ Error: ENOENT: no such file or directory, rename 'C:\Users\telmo.silva\csc-links\public\tmp\Chrysanthemum.jpg' -> 'C:\Users\telmo.silva\csc-links\public\tmp\d2abf375-d09f-440c-a5ba-adf4f
5725a73\Chrysanthemum.jpg'
errno: -4058,
code: 'ENOENT',
syscall: 'rename',
path: 'C:\\Users\\telmo.silva\\csc-links\\public\\tmp\\Chrysanthemum.jpg',
dest: 'C:\\Users\\telmo.silva\\csc-links\\public\\tmp\\d2abf375-d09f-440c-a5ba-adf4f5725a73\\Chrysanthemum.jpg' }
誰もが私が間違っているのか知っています?ありがとう!
両方の機能が非同期であるため、操作順序が反転する可能性があります。コールバックと約束の両方でそれを修正する方法を示すので、私はあなたの答えを選んだ。 –