Node.js 理解节点中的非阻塞IO

Node.js 理解节点中的非阻塞IO,node.js,express,nonblocking,Node.js,Express,Nonblocking,这些代码之间有什么区别 ***首先* 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;

这些代码之间有什么区别

***首先*

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
回调时执行的code>指令(即,然后引发
end
事件)

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


您可以将其视为指令
req.on('end',…)
是一个函数,用于为将来将要发生的事件设置处理程序,但那里的代码在收到事件之前不会执行。

如果在外部调用res.end,则在post请求到来时会立即调用它。您应该使用第一个代码,而不是第二个代码。