Проверьте, существует ли символическая ссылка в node.js

Ключевой проблемой является то, что если исходный файл, на который указывает символьная ссылка, не существует, но символическая ссылка (теперь мертвая) все еще существует, тогда fs.exists(symlink) вернет false.

Вот мой тестовый пример:

var fs = require("fs");

var src = __dirname + "/src.txt";
var dest =  __dirname + "/dest.txt";

// create a file at src
fs.writeFile(src, "stuff", function(err) {
    // symlink src at dest
    fs.symlink(src, dest, "file", function(err) {
        // ensure dest exists
        fs.exists(dest, function(exists) {
            console.log("first exists", exists);
            // unlink src
            fs.unlink(src, function(err) {
                // ensure dest still exists
                fs.exists(dest, function(exists) {
                    console.log("exists after unlink src", exists);
                });
            });
        });
    });
});

Результат:

first exists true
exists after unlink src false // symlink still exists, why is it false??

Проблема возникает из-за того, что я хочу создать символическую ссылку, если она не существует, или отмените ее и заново создайте, если это произойдет. В настоящее время я использую fs.exists для выполнения этой проверки, но столкнулся с этой проблемой. Что такое альтернатива, кроме fs.exists, которая не будет иметь эту же проблему?

Использование Node 10 на CentOS Vagrant в Windows 7.

Ответ 1

Попробуйте вместо этого fs.lstat и fs.readlink. lstat должен предоставить вам объект статистики для символической ссылки, даже если цель не существует, а readlink должен указать вам путь к цели, чтобы вы могли объединить эту логику для правильной идентификации неработающих ссылок.