检查node.js中是否存在符号链接

检查node.js中是否存在符号链接,node.js,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) { // s

关键问题是,如果符号链接指向的源文件不存在,但(现在已失效)符号链接仍然存在,则
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之外,还有什么替代方案不会出现同样的问题


在Windows 7上的CentOS Vagrant上使用节点10。

请尝试改用
lstat
应该为符号链接提供一个stats对象,即使目标不存在,
readlink
应该为您提供到目标的路径,这样您就可以组合该逻辑来正确识别断开的链接。

如果链接不存在,Hm、fs.lstat可能会重复。对,但最初的问题不是问链接本身不存在的情况。