我尝试创建简单的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

为什么Eval不工作?

最佳答案

默认情况下,流在数据事件上接收Buffer对象。
MDN开始:
如果eval()的参数不是字符串,eval()将返回未更改的参数
由于导出对象没有效果,eval按原样发送数据。要将数据转换为字符串,必须将套接字的编码显式设置为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());
    });
});

write()是必需的,因为toString()实际上接受了socket.writeWritable.write

关于javascript - Node.js评估和打印数据的TCP服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18285876/

10-13 06:01
查看更多