阅读文件和字符串平等问题

时间:2011-08-22 01:49:23

标签: javascript node.js

我希望以下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.');
    }
});

2 个答案:

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