2

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

为什么评估不起作用?

4

1 回答 1

2

默认情况下,流接收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接受stringor Buffer

于 2013-08-17T07:12:32.820 回答