#javascript #node.js #visual-studio-code #fs
#javascript #node.js #visual-studio-code #fs
Вопрос:
Этот внутренний код извлекает файл изображения из папки uploads / users. Код Visual Studio помечает fs.exists зачеркнутым, что это значит? Он устарел? Как я могу это заменить? Заранее спасибо.
getImageFile: (req, res) => {
let file = req.params.image;
let pathFile = './uploads/users/' file;
fs.exists(pathFile, (exists) => {
if(exists){
return res.sendFile(path.resolve(pathFile));
} else {
return res.status(200).send({message: 'No existe la imagen'});
}
});
}
Ответ №1:
Да, fs.exists
устарел, одна из причин заключается в том, что
Параметры для этого обратного вызова не согласуются с другими Node.js обратные вызовы. Обычно первый параметр в Node.js обратный вызов — это параметр ошибки, за которым при необходимости следуют другие параметры. Обратный вызов fs.exists() имеет только один логический параметр.
Документация довольно ясна об этом и рекомендуемых альтернативах ( fs.stat
и fs.access
)
Реальная проблема в вашем коде — это состояние гонки, с которым вы можете столкнуться при обратном вызове, если, например, этот файл будет удален тем временем. Самым безопасным способом было бы:
res.sendFile(path.resolve(pathFile), function (err) {
if (err) {
if (err.code === 'ENOENT') {
return res.status(200).send({message: 'No existe la imagen'});
}
else {
// handle other errors...
}
}
})
Здесь приведены другие распространенные системные ошибки.
Ответ №2:
Вероятно, потому, что fs.exists
устарел, и вы не должны использовать его в новом коде.