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')
.
我正在尝试使用 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')
.