Nodejs fs.exists问题

Nodejs fs.exists问题

在本机调试fs.exists没问题好好的,可是上传到Linux服务器之后,判断出现问题,绝对路径正常,相对路径返回false,有人遇到过么这是为什么…? /home/server/test.js (同目录下有一个main.js,路径写成“./main.js”也不行,“…/server/main.js”也不行,只有写成“/home/server/main.js”才可以) var fs = require(“fs”); fs.exists(“main.js”, function(exsist){ console.log(exsist); });

执行node /home/server/test.js 输出:false


6 回复

当然可以。你遇到的问题是因为fs.exists 方法在 Node.js 中已经被废弃了。此外,使用 fs.exists 来检查文件是否存在并不是最佳实践,因为它不是原子性的操作(即它可能在你检查文件存在性之后,但在实际打开或读取文件之前,文件已经不存在了)。

更好的方法是使用 fs.access 或者直接尝试读取文件。下面是一个示例代码,展示了如何使用 fs.access 来检查文件是否存在:

const fs = require('fs');

// 使用 fs.access 检查文件是否存在
fs.access('./main.js', fs.constants.F_OK, (err) => {
    if (err) {
        console.log('文件不存在');
    } else {
        console.log('文件存在');
    }
});

如果你希望在文件不存在时抛出一个错误,你可以这样做:

const fs = require('fs');

fs.access('./main.js', fs.constants.F_OK, (err) => {
    if (err) {
        console.error('文件不存在:', err);
        // 可以在这里处理错误
    } else {
        console.log('文件存在');
    }
});

解释

  1. fs.access 方法:

    • fs.access(path[, mode], callback) 用于检查文件是否可访问(存在和权限)。mode 参数是一个可选的位掩码,表示所需的访问模式。
    • fs.constants.F_OK 表示文件存在。fs.constants.R_OK, fs.constants.W_OK, fs.constants.X_OK 分别表示可读、可写和可执行权限。
  2. 回调函数:

    • 如果文件不存在或者没有足够的权限,fs.access 的回调函数中的 err 参数将包含一个错误对象。
    • 如果文件存在且有访问权限,err 将为 null

通过这种方式,你可以更安全地检查文件的存在性,并且避免了 fs.exists 被废弃的问题。


console.log(fs.realpathSync(‘main.js’)); 看看

path如果是相对路径应该是相对process.cwd()目录来算的,如果你在/home/server下执行node test.js就对了

Linux 下,工作目录可以设一下。

process.chdir(directory)

可能路径不对

在Node.js中,fs.exists 方法已经被标记为过时,并推荐使用 fs.existsSyncfs.access 来替代。fs.exists 在某些情况下可能无法正确识别相对路径,特别是在不同的操作系统或环境中。

你可以尝试使用 fs.access 方法来检查文件是否存在。以下是使用 fs.access 的示例代码:

const fs = require('fs').promises;

async function checkFileExists(filePath) {
    try {
        await fs.access(filePath);
        console.log(`${filePath} 存在`);
    } catch (err) {
        console.log(`${filePath} 不存在`);
    }
}

// 使用相对路径
checkFileExists('./main.js');

// 使用绝对路径
checkFileExists('/home/server/main.js');

这段代码首先导入了 fs.promises,以便我们可以使用异步方法 fs.accessfs.access 方法不会读取文件内容,只是检查是否有权限访问指定的路径。如果文件存在并且可访问,则返回成功;否则会抛出错误。

通过这种方式,你可以更可靠地检测文件是否存在,而不用担心路径格式问题。如果你需要同步版本,可以使用 fs.existsSync

const fs = require('fs');

if (fs.existsSync('./main.js')) {
    console.log('./main.js 存在');
} else {
    console.log('./main.js 不存在');
}

希望这能解决你的问题。

回到顶部