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

关键问题是,如果符号链接指向的源文件不存在,但(现在已经死了)符号链接仍然存在,那么fs.exists(symlink)将返回false

这是我的testing案例:

 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?? 

出现这个问题的原因是我想创build一个符号链接,如果它不存在,或者取消链接并重新创build它,如果它。 目前我使用fs.exists来执行这个检查,但遇到了这个问题。 除了fs.exists,除了这个问题外,还有什么替代scheme呢?

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

尝试使用fs.lstat和fs.readlink 。 即使目标不存在, lstat也会为你提供一个符号链接的统计对象,而readlink应该为你提供到目标的path,所以你可以把这个逻辑结合起来,正确的识别链接。