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新手,如有錯誤之處,請見諒。如幫忙指出,更是不勝感激。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM