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 ...
随机推荐
- 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上)
[转] 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上) jquery的功能总是那么的强大,用他可以开发任何web和移动框架,在浏览器市场,他一直是占有重要的份额,今天,就给大家 ...
- [置顶] Oracle学习路线与方法
还没有整理好.... 1.学习路线 Oracle官方文档:2 Day DBA-->2 Day+Performance Tuning Guide--->Administrator's Gui ...
- Python-数据库支持
10.Python-数据库支持 使用数据库的好处: a.支持数据的并发访问,多个用户同时对基于磁盘的数据进行读写而不造成任何文件的损坏: b.支持根据多个数据字段或属性进行复杂的搜索: 1.如何操作数 ...
- enode框架step by step之Staged event-driven architecture思想的运用
enode框架step by step之Staged event-driven architecture思想的运用 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件 ...
- hdu4474 Yet Another Multiple Problem
Yet Another Multiple Problem Description There are tons of problems about integer multiples. Despite ...
- Android中检测软键盘的弹出和关闭
Android系统并没有提供明显的API来监听软键盘的弹出和关闭,但是在某些情况下我们还是有办法来检测软键盘的弹出和关闭. 从StackOverflow找到了一个不错的方法.但是这种只适用于在mani ...
- JVM执行引擎的执行过程
摘自深入分析java web技术内幕
- oc之对象作为类的属性
对象做为类的属性 1. 一个Target中的类无法直接在另外1个Target中访问. 2. 类的属性代表什么? a. 类的属性代表这类事物具有的共同的特征 b. 类的属性代表这个类所拥有的东西. 灯: ...
- 正经学C#_表达式与其运算符[算术运算符]:《c#入门经典》
表达式:正如字面意义,它是通过算术运算符来进行运算的数学公式.表达式的意义我们都是很明白的,大白话就是一个公式嘛.不是很难懂. 表达式不是一个单独的存在,必然有操作数或者操作符的.在c#中有操作符有很 ...
- [ios2]使用NSOperationQueue简化多线程开发和队列的优先级 【转】
多线程开发是一件需要特别精心的事情,即使是对有多年开发经验的工程师来说. 为了能让初级开发工程师也能使用多线程,同时还要简化复杂性.各种编程工具提供了各自的办法.对于iOS来说,建议在尽可能的情况下避 ...