Javascript 读取文件和字符串相等问题

Javascript 读取文件和字符串相等问题,javascript,node.js,Javascript,Node.js,我希望下面的node.js程序读取一个文件并打印“登录失败”。如果文件中的文本是“登录失败”。但是“如果(数据==“登录失败”){”行无法返回true,程序打印“登录成功”。我使用的是“CentOS 5.5版(最终版)”Linux发行版。你知道怎么回事吗?谢谢 BASEPATH='/home/wz3chen/node/; fs.readFile(BASEPATH++'node.js/'++“loginLog”,函数(err,data){ console.log(“数据:”+数据); 如果(数据=

我希望下面的node.js程序读取一个文件并打印“登录失败”。如果文件中的文本是“登录失败”。但是“
如果(数据==“登录失败”){
”行无法返回true,程序打印“登录成功”。我使用的是“CentOS 5.5版(最终版)”Linux发行版。你知道怎么回事吗?谢谢

BASEPATH='/home/wz3chen/node/;
fs.readFile(BASEPATH++'node.js/'++“loginLog”,函数(err,data){
console.log(“数据:”+数据);
如果(数据==“登录失败”){
log('登录失败');
}否则{
log('登录成功');
}
});
传递给回调函数的“data”变量的类型为,与字符串进行比较时,该类型显然不会转换为字符串。您的文件末尾可能还有一个换行符,因此请对其进行修剪。请尝试以下操作:

if(data.toString().trim()=“登录失败”。){
// ...
[编辑]

正如@Jim Schubert在其评论中提到的,如果在调用
readFile
时指定字符编码,则
data
参数将是一个字符串,因此您也可以这样做:

fs.readFile(文件名'utf8',函数(err,data){
if(data.trim()=“登录失败”){
// ...
传递给回调函数的“data”变量的类型为,与字符串进行比较时,该类型显然不会转换为字符串。您的文件末尾可能还有一个换行符,因此请对其进行修剪。请尝试以下操作:

if(data.toString().trim()=“登录失败”。){
// ...
[编辑]

正如@Jim Schubert在其评论中提到的,如果在调用
readFile
时指定字符编码,则
data
参数将是一个字符串,因此您也可以这样做:

fs.readFile(文件名'utf8',函数(err,data){
if(data.trim()=“登录失败”){
// ...

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

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

+1用于指出类型为
Buffer
数据
仅在未提供编码(OP未提供编码)时才应为
Buffer
。但是,使用非严格相等(
=
)而不是严格相等(
=
)将
缓冲区
字符串
进行正确比较。至少,它在节点v0.4.8中是这样做的。+1用于指出类型为
缓冲区
数据
仅在未提供编码(OP未提供编码)时才应为
缓冲区。但是,使用非严格等式(
=
)而不是严格的相等(
==
)将正确地将
缓冲区
字符串
进行比较。至少,在节点v0.4.8中是这样。谢谢!两个答案都有效,很糟糕,我无法选择多个接受的答案。谢谢!两个答案都有效,很糟糕,我无法选择多个接受的答案。