我希望以下node.js程序读取文件并打印出“登录失败”。如果文件中的文本是“登录失败”。但是“if (data == "Login failed.") {
”行无法返回true并且程序打印出“Login succeeded”。我正在使用“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 :(得分:4)
传递给回调的“data”变量是Buffer
类型,在与字符串比较时显然不会转换为字符串。您也可能在文件末尾有换行符,因此请修剪它。试试这个:
if (data.toString().trim() == 'Login failed.') {
// ...
<强> [编辑] 强>
正如@Jim Schubert在他的评论中提到的,如果你在调用data
时指定字符编码,readFile
参数将是一个字符串,所以你也可以这样做:
fs.readFile(filename, 'utf8', function(err, data) {
if (data.trim() == 'Login failed.') {
// ...
答案 1 :(得分: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.');
}
});