如何使用node.js同步检查文件或目录是否存在?
当前回答
path模块不提供path.exists的同步版本,因此必须使用fs模块。
我能想到的最快的事情是使用fs.realpathSync,它将抛出一个必须捕获的错误,因此您需要使用try/catch创建自己的包装函数。
其他回答
fs.exists()已弃用,请勿使用https://nodejs.org/api/fs.html#fs_fs_exists_path_callback
您可以使用以下方式实现核心nodejs:https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js#L86
function statPath(path) {
try {
return fs.statSync(path);
} catch (ex) {}
return false;
}
这将返回stats对象,然后在获得stats对象后,您可以尝试
var exist = statPath('/path/to/your/file.js');
if(exist && exist.isFile()) {
// do something
}
查看源代码,有一个同步版本的path.exists-path.existsSync。看起来文档中没有找到它。
更新:
path.exists和path.existsSync现在已弃用。请使用fs.exists和fs.existsSync。
2016年更新:
fs.exists和fs.existsSync也已被弃用。请改用fs.stat()或fs.access()。
2019年更新:
使用fs.existsSync。它没有被弃用。https://nodejs.org/api/fs.html#fs_fs_existssync_path
很可能,如果你想知道文件是否存在,你计划在它存在的时候需要它。
function getFile(path){
try{
return require(path);
}catch(e){
return false;
}
}
这里有一个简单的包装解决方案:
var fs = require('fs')
function getFileRealPath(s){
try {return fs.realpathSync(s);} catch(e){return false;}
}
用法:
适用于目录和文件如果项存在,则返回文件或目录的路径如果项不存在,则返回false
例子:
var realPath,pathToCheck='<your_dir_or_file>'
if( (realPath=getFileRealPath(pathToCheck)) === false){
console.log('file/dir not found: '+pathToCheck);
} else {
console.log('file/dir exists: '+realPath);
}
确保使用==运算符测试return是否等于false。在适当的工作条件下,fs.realpathSync()返回false是没有逻辑原因的,所以我认为这应该可以100%工作。
我更希望看到一个不会产生错误和性能影响的解决方案。从API的角度来看,fs.exists()似乎是最优雅的解决方案。
使用fileSystem(fs)测试将触发错误对象,然后需要将其包装在try/catch语句中。节省一些精力,使用0.4.x分支中介绍的功能。
var path = require('path');
var dirs = ['one', 'two', 'three'];
dirs.map(function(dir) {
path.exists(dir, function(exists) {
var message = (exists) ? dir + ': is a directory' : dir + ': is not a directory';
console.log(message);
});
});
推荐文章
- 错误:无法找到模块“webpack”
- 在node.js中使用async / await文件系统
- NodeJS -用NPM安装错误
- 如何为本地安装npm包设置自定义位置?
- 回调函数来处理管道的完成
- Express函数中的“res”和“req”参数是什么?
- node.js TypeError:路径必须是绝对路径或指定根路径到res.sendFile[解析JSON失败]
- Passport.js -错误:序列化用户到会话失败
- Node.js vs .Net性能
- 从电子应用程序中删除菜单栏
- 如何用node.js实现一个安全的REST API
- 如何处理Node.js中的循环依赖
- 在猫鼬,我如何排序的日期?(node . js)
- 如何在Node.js内进行远程REST调用?旋度吗?
- 如何用分发文件发布npm包?