我正在学习Nodejs节点食谱第2版。
我喜欢这本书,因为它教我们解释看起来非常实用的示例代码。
无论如何,主要问题是以下是EX代码
var http = require('http');
//We are synchronously loading form.htmlat initialization time instead of accessing the disk on each request.
var form = require('fs').readFileSync('form.html');
var maxData = 2 * 1024 * 1024; //2mb
var querystring = require('querystring');
var util = require('util');
http.createServer(function (request, response) {
if(request.hasOwnProperty('destroy')){console.log('!!!!!!')};
if (request.method === "GET") {
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(form);
}
if (request.method === "POST") {
var postData = '';
request.on('data', function (chunk) {
postData += chunk;
if (postData.length > maxData) {
postData = '';
// this?? stream.destroy();
this.destroy();
response.writeHead(413); // Request Entity Too Large
response.end('Too large');
}
}).on('end', function() {
if (!postData) { response.end(); return; } // prevents empty post which requests from, crash
var postDataObject = querystring.parse(postData);
console.log('User Posted:\n' + postData);
//inspect : for a simple way to output our postDataObjectto the browser.
response.end('You Posted:\n' + util.inspect(postDataObject));
});
}
}).listen(8080);
:这是处理基本' post'的HTTP服务器。来自网络用户的请求
那边,我不知道是什么(this.destroy();)。
我猜这是请求可读的流对象。是不是? 我可以理解destroy()对象正在做什么(阻止 来自客户的任何进一步数据)但是 我在NodeJS API参考中找不到destroy方法。 (http://nodejs.org/api/all.html)
你能解释一下这个对象是什么,以及来自?
的destroy()方法在哪里答案 0 :(得分:0)
在此上下文中, this 表示实现http.IncommingMessage接口的ReadableStream实例。
显然,HTTP API参考中未记录 destroy(),但您可以在代码中找到它:/lib/_http_incoming.js#L106-L112
只是它会破坏与Stream关联的套接字。 您可以在Socket API中找到Socket.destroy()的文档。
无论如何,我认为使用request.abort()会更好,因为它在处理客户请求时更“干净”。