Answer a question

This backend code retrieves an image file from the uploads/users folder. Visual Studio Code marks fs.exists with strikethrough, what does it means? It's deprecated? How can i replace this? Thanks in advance.

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'});
            }
        });
    }

Answers

Yes, fs.exists is deprecated, one reason is that

The parameters for this callback are not consistent with other Node.js callbacks. Normally, the first parameter to a Node.js callback is an err parameter, optionally followed by other parameters. The fs.exists() callback has only one boolean parameter.

Documentation is pretty clear about this and recommended alternatives (fs.stat and fs.access)

The real problem in your code is the race condition you could encounter in your callback if for example that file gets deleted meanwhile. A safest way would be:

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...
        }
    }
})

Other common system errors are here.

Logo

开发云社区提供前沿行业资讯和优质的学习知识,同时提供优质稳定、价格优惠的云主机、数据库、网络、云储存等云服务产品

更多推荐