我尝试创建一个简单的TCP服务器来评估并打印结果,但是它不起作用,这是我的代码:
var net = require('net');
var server = net.createServer(function(socket) {
socket.on('data', function(data) {
socket.write('result: ');
socket.end(eval(data));
});
});
server.listen(8080);
当我连接到端口8080时,我得到了:
$ echo 10+10 | nc localhost 8080
result: 10+10
为什么评估无效?
默认情况下,流Buffer
在发生数据事件时接收对象。
从MDN:
如果eval()的参数不是字符串,则eval()返回的参数不变
由于eval
初始化对象无效,write()
因此请按原样发送数据。您必须将套接字的编码显式设置为utf8,才能将数据转换为字符串。
var server = net.createServer(function(socket) {
socket.setEncoding('utf8');
socket.on('data', function(data) {
socket.write('result: ');
var evaluatedData = eval(data);
socket.end(evaluatedData.toString());
});
});
toString()
是必需的,因为socket.write
实际上Writable.write
接受astring
或Buffer
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句