Файловая система узла fs.exist зачеркнута

#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 устарел, и вы не должны использовать его в новом коде.