Node.js用于评估和打印数据的TCP服务器

我尝试创build简单的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不起作用?

默认情况下,一个stream在数据事件上接收一个Buffer对象。

来自MDN :

如果eval()的参数不是一个string,eval()将返回参数不变

由于eval对象没有效果,所以write()按原样发送数据。 您必须明确地将套接字编码设置为utf8 ,以便将数据转换为string。

 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 ,接受一个stringBuffer