了解 Node 中的非阻塞 IO

Understanding non-blocking IO in Node

这些代码有什么区别?

***第一*

var express = require('express');
var app = express();

app.post('/', function (req, res) {

    console.log('Procesando abastecimiento...');

    var rawData = '';

    req.on('data', function (chunk) {
        rawData += chunk;
    });

    req.on('end', function(){
        console.log('Data recibida: ' + rawData);
        res.end();
    });    
});

第二

var express = require('express');
var app = express();

app.post('/', function (req, res) {

    console.log('Procesando abastecimiento...');

    var rawData = '';

    req.on('data', function (chunk) {
        rawData += chunk;
    });

    req.on('end', function(){
        console.log('Data recibida: ' + rawData);    
    }); 

    res.end();   
});

如果我在 'end' 事件的回调中关闭连接 (res.end()),客户端是否会等待所有数据读取完毕?我不明白其中的区别,我只知道使用第二种方式我的代码更快。你能解释一下为什么吗?

在第一个示例中,您将 res.end(); 指令设置为在请求 end 回调时执行(即引发 end 事件)。

在第二个中,您立即调用 res.end();,无需等待请求结束。

你可以把它想象成指令req.on('end', ...)是一个函数,它为将来会发生的事件设置一个处理程序,但是那里的代码直到接收到事件才执行。