Node.js readline.on('line', fn()) 看不到换行符

Node.js readline.on('line', fn()) doesn't see newlines

我正在尝试使用 readline 和 net 编写一个简单的终端 IRC 客户端。

使用 client.write() 发送命令非常好,除非我在 readline.on('line' (cb) => cbstuff) 内发送命令并且我不确定为什么。

我对一个可能的问题有两个想法,但不知道如何解决其中的任何一个:

我的第一个猜测是我必须更改一些关于 rl.createInterface() 的内容才能与客户端一起工作,而不是 stin/stdout。

我的第二个怀疑是 readline 从来没有看到马车 return 因为 \n\r\n 在某处得到 filtered/escaped。另一方面,直接在 client.write() 中发送 \r\n 对多行消息按预期工作。

这是我的代码:

const net = require('net');
const fs = require('fs');
const readline = require('readline');

const host = 'irc.freenode.net';
const port = 6666;
const client = new net.Socket();

rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

client.connect(port, host, () => {
    console.log(`CONNECTED TO: ${host}:${port}\n`);
    client.write('USER foo bar batz boo\r\nNICK nodetest123\r\n');
    client.write('JOIN #testchan123\r\n');

    rl.on('line', cmd => client.write(cmd));
    // rl.prompt(); doesn't help
});

client.on('data', data => {
    console.log(`DATA: ${data}`);
    fs.appendFile("log.txt", data, err => {
        if (err)
            return console.log(err);
    });
});

client.on('error', error => console.log(error));
client.on('close', () => console.log('Connection closed'));

你的bug大概在client.write(cmd),我觉得应该是client.write(cmd + '\r\n').