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

标签 javascript node.js tcp eval

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

If the argument of eval() is not a string, eval() returns the argument unchanged

由于evaluating对象没有效果,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)接受 string缓冲区

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

相关文章:

javascript - 要求 Node 中的类

javascript - 弹出模态文本字段

Java Gui 线程编码?

c - 带有MSG_TRUNC的Linux TCP recv()-写入缓冲区?

android - 无法通过 adb TCP/IP 连接 android 设备

javascript - 使用身份验证时 Angularjs 路由断断续续

javascript - 如何将参数传递给使用 ...mapActions(...) 映射的函数?

javascript - request.get 不在 node-cron 的回调中工作

node.js - 使用函数对 Firebase 数据库中 Node 的子 Node 进行排序

node.js - 我如何知道我的 socket.io 连接延迟了多长时间?