2011-08-22 49 views
1

我希望以下的node.js程序讀取文件並打印出「登錄失敗」。如果文件中的文本是「登錄失敗」。但是「if (data == "Login failed.") {」行不能返回true,並且程序輸出「登錄成功」。我正在使用「CentOS版本5.5(最終)」Linux發行版。任何想法是什麼?謝謝!讀取文件和字符串相等問題

BASEPATH = '/home/wz3chen/node/'; 

fs.readFile(BASEPATH + 'node.js/' + "loginLog", function (err, data) { 
    console.log("DATA:" + data); 
    if (data == "Login failed.") { 
     console.log('Login failed.'); 
    } else { 
     console.log('Login succeeded.'); 
    } 
}); 
+0

謝謝!這兩個答案的工作,吸收,我不能選擇有多個接受的答案。 –

回答

2

Linux中的單行文本文件通常以換行結束。

目前尚不清楚,不管你是包括fs,所以這裏是爲我工作的代碼:

var fs = require('fs'), 
    BASEPATH = '/home/jim/bin/'; 

fs.readFile(BASEPATH + "loginLog", function (err, data) { 
    if (err) throw err; 
    console.log("DATA:" + data); 

    if (data == "Login failed.\n") { 
      console.log('Login failed.'); 
    } else { 
      console.log('Login succeeded.'); 
    } 
}); 
4

「數據」變量傳遞給你的回調是Buffer類型,比較字符串時顯然不會轉換爲字符串。你的文件最後也可能有一個換行符,所以修剪它。試試這個:

if (data.toString().trim() == 'Login failed.') { 
    // ... 

[編輯]

由於@Jim舒伯特提到在他的評論中,data參數將是一個字符串,如果你設置的呼叫中的字符編碼readFile,所以你也可以這樣做:

fs.readFile(filename, 'utf8', function(err, data) { 
    if (data.trim() == 'Login failed.') { 
    // ... 
+0

+1用於指示類型爲「緩衝區」。只有當沒有提供編碼(OP沒有提供)時,'data'應該是'Buffer'。但是,使用非嚴格平等('==')而不是嚴格平等('===')將正確比較'Buffer'和'string'。至少,它在節點v0.4.8中執行。 –