Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js fs.existsSync为包含环境变量的路径返回不正确的值_Node.js - Fatal编程技术网

node.js fs.existsSync为包含环境变量的路径返回不正确的值

node.js fs.existsSync为包含环境变量的路径返回不正确的值,node.js,Node.js,我正在尝试使用来检查文件是否存在。当输入完整的文件系统路径时,它将成功返回。当路径包含环境变量(如~/foo.bar或$HOME/foo.bar)时,它无法找到该文件 我已经尝试了路径模块中的所有方法,首先对路径进行按摩,但似乎没有任何效果。我应该注意,文件路径是由用户通过命令行或JSON文件输入的 我知道环境变量存在于process.env中,但我想知道除了查找/替换每个可能的变量之外,是否还有其他方法来处理这个问题。环境变量由shell展开。节点的fs方法直接进行文件系统调用 从中读取所需的

我正在尝试使用来检查文件是否存在。当输入完整的文件系统路径时,它将成功返回。当路径包含环境变量(如
~/foo.bar
$HOME/foo.bar
)时,它无法找到该文件

我已经尝试了路径模块中的所有方法,首先对路径进行按摩,但似乎没有任何效果。我应该注意,文件路径是由用户通过命令行或JSON文件输入的


我知道环境变量存在于
process.env
中,但我想知道除了查找/替换每个可能的变量之外,是否还有其他方法来处理这个问题。

环境变量由shell展开。节点的
fs
方法直接进行文件系统调用

从中读取所需的变量并用于连接

path.join(process.env.HOME, 'foo.bar');
(请记住,如果需要跨平台,Windows上没有
HOME
变量;我相信这是
USERPROFILE


因为您要处理用户输入,所以必须自己解析路径组件

首先,规范化输入字符串并将其拆分为数组

var p = path.normalize(inputStr).split(path.sep);
如果第一个元素是
~
,请将其替换为主目录

if (p[0] == '~') p[0] = process.env.HOME || process.env.USERPROFILE; // Windows
然后在每个元素上循环,如果它以
$
开头,则替换它

for (var i = 0; i < p.length; i++) {
    if (p[i][0] == '$') {
        var evar = p[i].substr(1);
        if (process.env[evar]) p[i] = process.env[evar];
    }
}

环境变量由shell展开。节点的
fs
方法直接进行文件系统调用

从中读取所需的变量并用于连接

path.join(process.env.HOME, 'foo.bar');
(请记住,如果需要跨平台,Windows上没有
HOME
变量;我相信这是
USERPROFILE


因为您要处理用户输入,所以必须自己解析路径组件

首先,规范化输入字符串并将其拆分为数组

var p = path.normalize(inputStr).split(path.sep);
如果第一个元素是
~
,请将其替换为主目录

if (p[0] == '~') p[0] = process.env.HOME || process.env.USERPROFILE; // Windows
然后在每个元素上循环,如果它以
$
开头,则替换它

for (var i = 0; i < p.length; i++) {
    if (p[i][0] == '$') {
        var evar = p[i].substr(1);
        if (process.env[evar]) p[i] = process.env[evar];
    }
}

是否改用process.env.HOME?然后使用path.join获得正确的路径

fs.existsSync(path.join(process.env.HOME,"foo.bar"));

是否改用process.env.HOME?然后使用path.join获得正确的路径

fs.existsSync(path.join(process.env.HOME,"foo.bar"));

我真的希望答案是一个内置的,但这应该会起作用我真的希望答案是一个内置的,但这应该会起作用