读文件和string平等问题

我想要下面的node.js程序读取一个文件并打印出“login失败”。 如果文件中的文本是“login失败”。 然而,“ if (data == "Login failed.") { ”行不能返回true,程序打印出“login成功”。 我正在使用“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.'); } }); 

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.'); } }); 

传递给你的callback函数的“data”variables的types是Buffer ,与string比较时,它显然不会转换为string。 你也可能在你的文件的最后有一个换行符,所以修剪它。 试试这个:

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

[编辑]

正如@Jim Schubert在他的评论中提到的那样,如果在调用readFile指定字符编码, data参数将是一个String,所以你也可以这样做:

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