2012-08-10 54 views
2

損失方面的self.test()不會被觸發內部http.createServer()「這」在Node.js的HTTP回調

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等)。


UPDATE

實例:

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); 
}; 
+0

這些函數根本沒有達到,或者'.test'不是你認爲的那樣。而且''這個''不會失去範圍,因爲它與範圍無關。另外,'self'是一個正常的變量,所以如果'self'不起作用,那麼'this'就會失去範圍是不準確的。 – Esailija 2012-08-10 12:44:01

+0

它是拋出一個錯誤還是根本不運行?如果它沒有運行,那麼之後是否調用了app.listen()?你有沒有嘗試製作http請求? – juandopazo 2012-08-10 12:44:27

+0

你有沒有試過把這個傳入函數? – em3ricasforsale 2012-08-10 12:47:23

回答

1

req將發出僅當它具有主體的end事件。 GET請求不會發出它,但POST會。

另外,您應該調用listen將您的服務器綁定到套接字。你如何向服務器提出請求?

+0

我在上面的評論中回答了這個問題 – Maroshii 2012-08-10 12:51:57

+0

你能告訴我們你是如何實例化「App」的,以及如何調用'createServer'?例如,如果忘記調用'new',它將不起作用。有關更多信息,請參閱[JS garden](http://bonsaiden.github.com/JavaScript-Garden/#function.constructors)。 – 2012-08-10 12:57:37

+0

我認爲這是'createServer'函數內部的一個問題,與'this'無關,我試圖'console.log(「test」)',它也沒有工作。 – Maroshii 2012-08-10 13:08:25