'this'在Node.js HTTP回调中丢失了上下文

时间:2012-08-10 12:40:33

标签: javascript node.js scope prototype

self.test()内未触发http.createServer()

App.prototype.createServer = function(){
    var self = this;

    var s = http.createServer(function(req,res){

                self.test(); // THIS DOESN`T WORK.

                req.addListener('end',function(){
                    res.writeHead(200,{'Content-Type' : 'application/x-javascript'});

                    self.test(); // THIS DOESN`T WORK.
                });

            });

                 self.test(); // THIS WORKS.
    return s;
};
App.prototype.test = function() {
    console.log('test')
};

如果我将其移出http.createServer()则可行。为什么是这样? this存储在self中,这样可以避免丢失上下文。我在这里失踪了什么? 如有必要,我可以提供额外的代码和更多功能(self.init等)。


更新

实例:

new App({
    port: 8000
});

初​​始化:

function App(options){
    if (! (this instanceof arguments.callee)) {
        return new arguments.callee(arguments);
    }
    var self = this;
    self.settings = {
        port : options.port
    }
    self.init();
};
App.prototype.init = function() {
        var self = this;
        self.server = self.createServer();
        self.server.listen(self.settings.port);
};

1 个答案:

答案 0 :(得分:1)

req只有在拥有正文时才会发出end个事件。 GET次请求不会发出请求,但会POST

此外,您应该调用listen将服务器绑定到套接字。你是如何向服务器发出请求的?