Nodejs Файл удаляется перед отправкой ответа (res.send) - PullRequest
0 голосов
/ 16 января 2020

Здесь проблема в том, что File удаляется с сервера перед отправкой ответа клиенту и отображает ошибку, поскольку на этом пути нет изображения.

 // Here some code 
 res.status(200).sendFile(path.join(__dirname, "../../image", `/${response.id}.png`));

   // Delete image from server
    fs.unlink(imagePath, function (err) {
         if (err) throw err;
         console.log('File deleted!');
     })

1 Ответ

2 голосов
/ 16 января 2020

Вам нужно будет отслеживать обратный вызов на res.sendFile(), чтобы вы знали, когда отправка действительно была выполнена, прежде чем вы сможете безопасно удалить свой файл.

res.sendFile() асинхронный, поэтому он возвращается до выполнения задания, поэтому вы удаляли файл до выполнения res.sendFile(). Используйте обратный вызов, чтобы узнать, когда это на самом деле сделано.

   let fname = path.join(__dirname, "../../image", `/${response.id}.png`);
   res.status(200).sendFile(fname, err => {
      if (err) {
          console.log(err);
          res.sendStatus(500);
      }
      fs.unlink(imagePath);
   });

Примечание. При передаче обратного вызова на res.sendFile() необходимо вручную обработать состояние ошибки и отправить ответ об ошибке, повторить попытку, отправить альтернативное содержимое, et c ... чтобы отправить соответствующий ответ.

Мне также интересно, почему вы отправляете одно имя файла и пытаетесь удалить другое. Разве не имеет смысла использовать одну и ту же локальную переменную для имени файла, которое вы отправляете, и файла, который вы удаляете?

...