2015-10-27 2 views
0

Когда я создал сервер http с узлом, мне интересно, что объект запроса может как-то указать на объект ответа. Прямо сейчас, я делаю глобальную переменную равной ответу и доступ к ней, но я хотел бы получить доступ к ответу непосредственно из запроса.node.js request point to response

var http = require('http'); 

var server = http.createServer(server_handler).listen(port); 

var response_stream_object = {}; 

function server_handler(request, response) { 
    response_stream_object = response; 
    request.func(param); 
} 

http["IncomingMessage"].prototype.func = function(param) { 
    // Doing something with response_stream_object 
} 
+1

НЕ сохраняйте объекты запроса/ответа в глобальных переменных или даже переменных модуля. Если у вас одновременно обрабатывается несколько запросов, они будут сжиматься друг с другом, если вы сохраните их в одной и той же переменной с более высоким охватом. Ответная переменная действует только в течение продолжительности этого конкретного запроса, так что вы можете просто передать их во все, что им нужно, когда вы вызываете другую функцию из обработчика запроса. – jfriend00

ответ

1

Не использовать глобальную переменную. Он используется всеми запросами на вашем сервере. Поэтому он может быть перезаписан, если другой запрос приходит, прежде чем завершить обработку текущего запроса. Это только ОК, если у вас нулевая асинхронная обработка (нет базы данных, нет доступа к диску, нет доступа к сети).

Поскольку это javascript, вы можете добавлять предметы к объектам (любому объекту) в любое время. Например, вы можете даже добавить материал на встроенный в Math объекта:

// only an example, don't do this: 
Math.monkey = "ooh, ooh, aah, aah"; 

Таким образом, вы можете просто сделать:

request.response = response; 

Теперь связанный объект ответа напрямую привязан к объекту запроса.


Но рассматривать долго и упорно о вашей архитектуре, если вам нужно сделать это. Если вам действительно нужно это сделать, вы, вероятно, делаете что-то неправильно.