Я работаю над хитрым планом, который предполагает использование node.js в качестве прокси-сервера перед другим сервисом.
Вкратце:
- Отправка входящего запроса в статический файл (если он существует)
- В противном случае, отправка запроса в другую службу
У меня работают основы, но сейчас я пытаюсь заставить все это работать с Sencha Connect , чтобы я мог получить доступ ко всему предоставленному промежуточному программному обеспечению.
Все действие происходит в dispatchProxy ниже
connect(
connect.logger(),
connect.static(__dirname + '/public'),
(request, response) ->
dispatchProxy(request, response)
).listen(8000)
dispatchProxy = (request, response) ->
options = {host: host, port: port, method: request.method, headers: request.headers, path: request.url}
proxyRequest = http.request(options, (proxyResponse) ->
proxyResponse.on('data', (chunk) ->
response.write(chunk, 'binary')
)
proxyResponse.on('end', (chunk) ->
response.end()
)
response.writeHead proxyResponse.statusCode, proxyResponse.headers
)
request.on('data', (chunk) ->
proxyRequest.write(chunk, 'binary')
)
# this is never triggered for GETs
request.on('end', ->
proxyRequest.end()
)
# so I have to have this here
proxyRequest.end()
Вы заметите proxyRequest.end () впоследняя строка выше.
Я обнаружил, что при обработке запросов GET событие END запроса никогда не запускается и, следовательно, требуется вызов proxyRequest.end ().POST-запросы вызывают события DATA и END, как и ожидалось.
Итак, несколько вопросов:
Безопасен ли этот вызов proxyRequest.end ()?То есть будет ли proxyResponse завершаться, даже если он вызывается вне циклов событий?
Это нормально для GET, чтобы не вызывать события END, или END захватывается где-тов стеке подключения?