为什么这个nodejs代理服务器挂了?
Why does this nodejs proxy server hang?
在浏览器中 javascript 可悲地损坏了,因为发出请求的唯一方法是使用脚本标签和 jsonp。为了使这个有用,我正在尝试制作一个 nodejs 服务器,给定回调名称和地址,在该地址加载页面并在回调调用中填充它并提供结果。但是,我对 nodejs 几乎一无所知。如果服务器的响应是从脚本标记加载的,那么它会导致实际加载网页。目前,我将请求写为 localhost:8000/callback/address
,因此脚本标记可能是 <script src="localhost:8000/alert/https://www.google.com" type="text/javascript"></script>
。这是我的服务器代码:
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") 回调。
如果您不关心任何请求数据,您可以在添加 end
事件处理程序后添加 req.resume();
。
它变得 "stuck" 的原因是自节点 v0.10 起,流开始时处于暂停状态,因此您需要通过以某种方式读取它们来取消暂停。 req.resume();
做到了这一点。一旦请求流中没有任何内容(可能什么都没有),将发出 end
事件。
在浏览器中 javascript 可悲地损坏了,因为发出请求的唯一方法是使用脚本标签和 jsonp。为了使这个有用,我正在尝试制作一个 nodejs 服务器,给定回调名称和地址,在该地址加载页面并在回调调用中填充它并提供结果。但是,我对 nodejs 几乎一无所知。如果服务器的响应是从脚本标记加载的,那么它会导致实际加载网页。目前,我将请求写为 localhost:8000/callback/address
,因此脚本标记可能是 <script src="localhost:8000/alert/https://www.google.com" type="text/javascript"></script>
。这是我的服务器代码:
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") 回调。
如果您不关心任何请求数据,您可以在添加 end
事件处理程序后添加 req.resume();
。
它变得 "stuck" 的原因是自节点 v0.10 起,流开始时处于暂停状态,因此您需要通过以某种方式读取它们来取消暂停。 req.resume();
做到了这一点。一旦请求流中没有任何内容(可能什么都没有),将发出 end
事件。