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请求到来时会立即调用它。您应该使用第一个代码,而不是第二个代码。