nodejs问题整理--fs.exists无法正确判断文件的问题
fs.exists方法
方法说明:
测试某个路径下的文件是否存在。回调函数包含一个参数exists,true则文件存在,否则是false。
语法:
fs.exists(path, callback)
由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )
接收参数:
path 欲检测的文件路径,
callback 回调
例子1:
fs.exists('/etc/passwd', function (exists) {
util.debug(exists ? "it's there" : "no passwd!");
});
以上是笔者在网上查到语法和示例,但是实际使用的时候却发现了问题!
问题代码与解决
例子2:
代码如下:(此代码也是网上示例)
http.createServer(function(req, res){
var reqPath = url.parse(req.url).pathname; fs.exists(reqPath, function(exists){
if(!exists){
consloe.log(reaPath + ' not exists.');
}else{
//do something
}
});
});
服务端调用后会提示 xxx not exists。不论这个文件是否存在都会提示这个错误。这明显是fs.exists这个回调参数都会false,才会出现这个情况,也就是说这个路径下文件无法找到相应文件。我们用console.log将reqPath打印出来,如下:
/index.html
目录中文件的确存在,可是为何提示不存在那?笔者通过查询网上回答和参阅资料发现了问题
fs.exists方法中参数path默认情况下路径是根目录开始完整路径,也就是文件的绝对路径。
所以例子1中,参数path使用的是'/etc/passwd',熟悉Linux的都知道etc是Linux服务器根目录下几个目录之一。
找到了问题,下面我们看解决方法:
方法1:
在为参数path前面加个. 或者__dirname,如示例中的console返回的实际地址就是'./index.html'或'__dirname/index.html'。
在nodejs中./xxxx指的是当前目录,__dirname指的是获取当前模块文件所在目录的完整绝对路径(适用于调用此方法的文件目录与网站目录不同情况),具体用法可以自行百度。
代码可修改为:
http.createServer(function(req, res){
var reqPath = url.parse(req.url).pathname;
var realPath = '.'+reqPath;//var realPath = __dirname+reqPath;
fs.exists(realPath, function(exists){
if(!exists){
consloe.log(reaPath + ' not exists.');
}else{
//do something
}
});
});
方法2:
使用path.join返回拼接后的路径,如示例2中可加入var realPath = path.join("/usr/www", reqPath),笔者的web服务器端完整目录是/usr/www,所以将这个目录拼接上,之所以使用这个方法是可以正确的使用当前系统的路径分隔符,兼容两种系统。使用方法如下:
path.join([path1][, path2][, ...])用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是"/",Windows系统是"\"。
代码可修改为:
http.createServer(function(req, res){
var reqPath = url.parse(req.url).pathname;
var realPath = path.join('/usr/www',reqPath);
fs.exists(realPath, function(exists){
if(!exists){
consloe.log(reaPath + ' not exists.');
}else{
//do something
}
});
});
以上两种方法都可以在目录正确和文件存在的情况下,正确的执行do something了。
nodejs新手,如有错误之处,请见谅。如帮忙指出,更是不胜感激。
nodejs问题整理--fs.exists无法正确判断文件的问题的更多相关文章
- Qt:正确判断文件、文件夹是否存在的方法
一直对Qt的isFile.isDir.exists这几个方法感到混乱,不知道到底用哪个,网上搜了下资料,也是用这几个方法但是都没有对其深究,经过测试发现会存在问题,先看看下面的测试代码 { QFile ...
- Python判断文件是否存在的三种方法
通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...
- Python判断文件是否存在的三种方法【转】
转:http://www.cnblogs.com/jhao/p/7243043.html 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先 ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- linux下判断文件和目录是否存在[总结]
1.前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在.我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询. 2.stat系列函数 stat函数用来返回与文 ...
- Python 判断文件是否存在的三种方法
通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...
- linux下判断文件和目录是否存在
1.前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在.我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询. 2.stat系列函数 stat函数用来返回与文 ...
- python判断文件夹和文件是否存在
1.os.path.exists()既可以判断文件是否存在,又可以判断文件夹是否存在 2.os.path.isfile()判断文件是否存在 3.os.path.isdir()判断文件夹是否存在
- js,nodejs如何判断文件是什么编码格式
nodejs编码只支持utf8的编码方式,无论是打开某个文件或者写.js脚本都得以utf8的编码方式保存,不然程序无法运行,读出来的文件是乱码. 如果是在前台,读取文件是通过FileReader或者F ...
随机推荐
- 构建RESTful风格的WCF服务
构建RESTful风格的WCF服务 RESTful Wcf是一种基于Http协议的服务架构风格. 相较 WCF.WebService 使用 SOAP.WSDL.WS-* 而言,几乎所有的语言和网络平台 ...
- 谷歌、flick网站图片 一次性下载 javaWeb项目 多线程下载,
源码下载:http://download.csdn.net/detail/liangrui1988/5760473
- 【C++自我精讲】基础系列四 static
[C++自我精讲]基础系列四 static 0 前言 变量的存储类型:存储类型按变量的生存期划分,分动态存储方式和静态存储方式. 1)动态存储方式的变量,生存期为变量所在的作用域.即程序运行到此变量时 ...
- C/C++ 内存对齐
一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问, ...
- Linux负载均衡软件LVS之二(安装篇)
一. 安装LVS软件 1.安装前准备工作操作系统:统一采用Centos4.4版本.地址规划,如表1所示:表1 更详细的信息如图2所示: 图2中的VIP指的是虚拟IP地址,还可以叫做LVS集群的服务I ...
- C语言之自增和自减运算符
一 自增和自减 自增(++):就是给自己的值再加1 自减(--):就是给自己的值减1 tips: ++(--)可以放在前面,也可以放在后面,效果都是一样,都是会给自身+1(-1) 前缀++(--):会 ...
- Anaconda安装第三方包(whl文件)
先说下环境 Anaconda 对应Python3.5的版本 win7,64位系统. step1:下载whl文件 step2:打开‘Anaconda Command Prompt‘, 如下图: step ...
- Angularjs实现简单分页
一个后台中总需要一款分页,那我为了自己方便使用,实现如下效果 我把这个组件命名为tm.pagination,原因是因为起名真的太难起了.而且我网名也叫天名, TM就这样了吧.github地址https ...
- java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from 解决
在用spark的yarn-cluster模式跑fpgrowth进行频繁项集挖掘的时候,报如下错误: ERROR yarn.ApplicationMaster: User class threw exc ...
- Java文档注释
文档注释是用于生成API文档,API主要用于说明类.方法.成员变量 javadoc工具 处理文档源文件在类.接口.方法.成员变量.构造器和内部类之前的注释,忽略其他地方的文档注释.而且javadoc工 ...