2015-11-13 3 views
0

В браузере javascript патетически нарушен в том, что единственный способ сделать запросы - использовать скриптовые теги и jsonp. Чтобы сделать это полезным, я пытаюсь создать сервер nodejs, который, учитывая имя и адрес обратного вызова, загружает страницу по адресу и накладывает ее на вызов для обратного вызова и служит для результата. Тем не менее, я ничего не знаю о nodejs. Если ответ сервера загружен из тега скрипта, это приведет к фактической загрузке веб-страницы. В настоящее время я пишу запрос как localhost:8000/callback/address, поэтому тег сценария может быть <script src="localhost:8000/alert/https://www.google.com" type="text/javascript"></script>. Вот мой код для сервера:Почему этот узел прокси-сервера nodejs висит?

var http = require("http"); 
var request = require("request"); 
var server = http.createServer(function(req, res){ 
    req.on("end", function(){ 
     console.log("alive"); 
     var url = req.url; 
     var i = url.indexOf("/", 1); 
     request(url.substring(i + 1), function(err, ret, body){ 
      res.writeHead(200); 
      res.write(url.substring(1, i) + "(\"" + body + "\");"); 
      res.end(); 
     }); 
    }); 
}); 

server.listen(8000); 

Почему это остается загружаемым в течение очень долгого времени, но на самом деле не загружается? С помощью console.log() кажется, что обратный вызов req.on («end») даже не вызван.

+0

Неужели 'console.log ('alive' 'печатается? –

+0

@bruno_cw no ... – hacatu

+0

Вы можете попробовать поставить журнал выше 'req.on (« end », function() {' и сделать запрос? –

ответ

2

Если вам не нужны данные запроса, вы можете просто добавить req.resume(); после того, как вы добавите обработчик событий end.

Причина, по которой он «застревает», заключается в том, что, поскольку узел v0.10, потоки начинаются в состоянии паузы, поэтому вам нужно их отключить, прочитав их каким-то образом. req.resume(); выполняет это. Когда в потоке запроса ничего не осталось (чего не может быть ничего), произойдет событие end.