2012-01-01 2 views
0

Я реализую http server для некоторого проекта.отправка объектов в функцию обратного вызова в качестве параметра-nodejs

У меня есть HttpServer объекта, который я создал, который содержит в нем сервер (чистый модуль)

этот сервер содержит наделите информацию, и я хочу, чтобы передать его в качестве параметра функции обратного вызова. как бы вы сделали с «setTimeout»

var time=setTimeout(function(**a**){do somthing}, 2000, **someObject**); 

Я пытался делать что-то подобное в моем коде, но не распознает параметр I, переданного в качестве объекта

var net = require('net'); 

function HttpServer(port){ 
    this.port=port; 
} 

HttpServer.prototype.start = function(){ 
    console.log("starting the server"); 
    this.server = net.createServer(function (socket,server) { 
     console.log("my port is: "+server.port) 
     socket.on('data',function(dat){ }); 
               },this); 
     //i am trying to send to the createserver callback function 
     //the parameter 'this' that actually is an HttpServer 
     //and the callback function secives it as 'server' 
     //when i run the program i get an error that server is 
     //undefiend and therefor does not have a member port 

    this.server.listen(this.port); 
} 

var httpserver= new HttpServer(4444); 
httpserver.start(); 

Почему он не признает параметр послал?

+0

Если вы пытаетесь передать объект, он не должен находиться внутри функции «запуска» вашего веб-сервера. Вы должны передать его с помощью GET/POST, а затем вы вернете объект/json в ответ. –

+0

, но это не то, что я хочу сделать ... i сервер, которому он сам нужен этот объект, независимо от того, какой метод/запрос ему дано – kakush

+0

Получил это ... Думаю, вы получили правильный ответ от @davin. –

ответ

2
var net = require('net'); 

function HttpServer(port){ 
    this.port=port; 
} 

HttpServer.prototype.start = function(){ 
    console.log("starting the server"); 
    var that = this; //Store this to that variable 
    this.server = net.createServer(function (socket, server) { 
     console.log('Server port is: ' + that.port); // Use that in an anonymous function 
     socket.on('data',function(dat){ }); 
    }); 
    this.server.listen(this.port); 

} 


var httpserver= new HttpServer(4444); 
httpserver.start(); 
+1

Я написал почти точный ответ, но, думаю, вы неправильно читаете скобки, подобные мне. Посмотрите внимательно на скобки. 'that' и' this' находятся в одной области, так что ничего не меняет ... I.e. 'that' на самом деле не ограничен анонимной функцией. – davin

+0

Я отредактировал свой ответ: D – Headshota

Смежные вопросы