nodejs这个属性和destroy()方法

时间:2014-08-26 22:52:42

标签: node.js

我正在学习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()方法在哪里

1 个答案:

答案 0 :(得分:0)

在此上下文中, this 表示实现http.IncommingMessage接口的ReadableStream实例。

显然,HTTP API参考中未记录 destroy(),但您可以在代码中找到它:/lib/_http_incoming.js#L106-L112

只是它会破坏与Stream关联的套接字。 您可以在Socket API中找到Socket.destroy()的文档。

无论如何,我认为使用request.abort()会更好,因为它在处理客户请求时更“干净”。