小菜鸟关于Nodejs中ON的疑问。

小菜鸟关于Nodejs中ON的疑问。

像createServer(function(req,res)) req,res这些对象怎么传进去的? 还有client.on(‘data’,function(data))里的DATA是怎么传进去的,on是表示对事件监听的回调函数么?

6 回复

当然可以。在Node.js中,on 方法主要用于事件驱动编程,它用于监听特定事件并注册相应的回调函数。你可以将 on 理解为一种机制,用来订阅某个事件何时发生,并在事件触发时执行相应的操作。

1. reqres 对象

当你使用 http.createServer 创建一个HTTP服务器时,Node.js会在每次接收到新的HTTP请求时自动调用你传递给 createServer 的回调函数。这个回调函数会接收两个参数:req (请求对象) 和 res (响应对象)。

示例代码:

const http = require('http');

http.createServer((req, res) => {
    console.log('Request received:', req.method, req.url);
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
}).listen(3000, () => {
    console.log('Server is running on port 3000');
});

在这个例子中,当客户端向服务器发送请求时,reqres 对象会被自动传入回调函数中。req 包含了有关请求的所有信息(如方法、URL等),而 res 则用于构建和发送响应。

2. client.on('data', function(data))

在客户端或流式处理中,on 方法同样用于监听事件。例如,在创建一个TCP客户端时,你可以监听 'data' 事件来处理从服务器接收到的数据。

示例代码:

const net = require('net');

const client = new net.Socket();
client.connect(3000, '127.0.0.1', () => {
    console.log('Connected to server!');
    client.write('Hello Server');
});

client.on('data', (data) => {
    console.log('Received data:', data.toString());
    client.destroy(); // 关闭连接
});

client.on('close', () => {
    console.log('Connection closed');
});

在这个例子中,当客户端接收到数据时,'data' 事件被触发,data 参数包含了从服务器接收到的数据。on 方法在这里用于注册一个回调函数,该函数会在事件发生时被调用。

通过这种方式,Node.js 使用事件驱动模型使得异步编程更加直观和高效。希望这能解答你的疑问!


这些都是回调函数。由系统调用,参数也是系统传进去的。

哦,这样呀,谢谢。

Node 好像一大堆都从 events 继承下来的, 和 Backbone 好像, http://nodejs.org/api/events.html events 模块的 JS 实现, 也有源码可看 https://github.com/joyent/node/blob/master/lib/events.js#L89 https://github.com/Wolfy87/EventEmitter/blob/master/EventEmitter.js#L300

仔细看了一下,非常感谢。

当然可以!在Node.js中,on 方法用于注册事件处理器,监听特定的事件。通常情况下,这些事件是由某些操作触发的,比如接收到数据、连接建立成功等。

关于 req, res 的传递

在创建一个HTTP服务器时,createServer 方法会接受一个回调函数作为参数。每当有一个新的请求到达时,这个回调函数就会被调用,并且会自动传入两个参数:reqresreq 代表客户端的请求,而 res 代表用于向客户端发送响应的对象。

示例代码:

const http = require('http');

http.createServer((req, res) => {
    // 处理请求
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
}).listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

关于 client.on('data', function(data)) 的传递

当你使用 net 模块创建一个TCP服务器或客户端时,client.on('data', callback) 方法用于监听数据接收事件。每当有新的数据从连接的另一端传来时,这个回调函数就会被调用,并将接收到的数据作为参数传递给它。

示例代码:

const net = require('net');

const server = net.createServer((socket) => {
    socket.on('data', (data) => {
        console.log(`Received data: ${data.toString()}`);
        socket.end('Data received.\n');
    });

    socket.on('end', () => {
        console.log('Client disconnected');
    });
});

server.listen(4000, () => {
    console.log('Server listening on port 4000');
});

总结

  • req, res 是由 http.createServer 自动传入的。
  • client.on('data', callback) 中的 data 是由底层网络通信机制自动触发的事件,当有数据到达时,事件处理器会被调用并传入接收到的数据。

希望这些解释对你有帮助!如果你有更多的问题,随时问我。

回到顶部