Javascript 错误:协议:191.168.XXX.XXX:不支持
我有以下代码:Javascript 错误:协议:191.168.XXX.XXX:不支持,javascript,node.js,Javascript,Node.js,我有以下代码: http.get('191.168.XXX.XXX:219/query', function (res) { ... }); IP也指向另一台运行node.js的机器,并重定向到要下载的真实文件(res.headers.location的检查在这一行之后)。问题是,即使我可以使用任何浏览器访问此IP:port,node.js也会抛出一个异常: http.js:1840 throw new Error('Protocol:' + options.protocol
http.get('191.168.XXX.XXX:219/query', function (res) {
...
});
IP也指向另一台运行node.js的机器,并重定向到要下载的真实文件(res.headers.location的检查在这一行之后)。问题是,即使我可以使用任何浏览器访问此IP:port,node.js也会抛出一个异常:
http.js:1840
throw new Error('Protocol:' + options.protocol + ' not supported.');
^
Error: Protocol 191.168.XXX.XXX: not supported.
at Object.exports.request (http.js:1840:11)
at Object.exports.get (http.js:1840:11)
at get_link (/home/pi/app.js:XXX:XX)
at init (/home/pi/app.js:XXX:XX)
at Object.cb [as oncomplete] (fs.js:168.19)
所以http.get似乎不喜欢我的地址,因为我知道我需要打另一个电话
我试过:
file_url = {
hostname : 191.168.XXX.XXX,
port : 219,
path : 'query'
};
相反,我被解雇了
编辑:
因此,在尝试创建url并出错之后,我开始这样做:
var link = {
protocol: 'http:',
hostname: '191.168.XXX.XXX',
port: 219,
path: '/?query'
};
http.get(link, function (res) {
console.log(res.statusCode + ' ' + res.headers.location);
...
});
服务器端,代码为:
function web (req, res) {
console.log('Request!');
var page = url.parse(req.url).pathname,
query = url.parse(req.url).query;
console.log(query + ' asked for smil');
if(page === '/' && smil[query]) {
log('ACCEPT', 'Redirecting to ' + smil[query]);
res.writeHead(302,
{Location: smil[query]}
);
res.end();
} else { //AUTRE
console.log('Refusing connection');
res.writeHead(404, {'Content-Type': 'text/html'});
res.end();
}
}
如果我从浏览器中调用191.168.XXX.XXX,如果我有有效的参数,我将被重定向或正确拒绝。但是从我的客户端代码来看,我仍然在http.get callback之前得到了econnrefluse。根据Node的说法,get
方法就像request
方法一样,它使用Node的解析URL。虽然url.parse
可以处理无方案的url,但端口组件中的前导冒号(:219
)会使parse
认为您的url确实有一个方案(这里,初始的192.168.XXX.XXX
),这显然是不受支持的方案
这里的解决方案是明确指定一个方案,例如,
http://192.168.XXX.XXX/query
您正在使用191作为第一个地址字节,但我强烈怀疑您的地址以192开头-以191开头的地址是公共地址,请参阅以获取专用网络保留的地址范围的概述
因此,现在您正在向internet上的某个随机机器发送请求。在最后一个示例中,您指定服务器在端口219上运行,这对于Web服务器来说是一个非常不寻常的端口。您确定目标计算机上有一个Web服务器正在侦听该端口吗?请尝试
http.get('http://191.168.XXX.XXX:219/query,函数(res){
,因为http.js似乎希望您正确定义所请求的URL,即包括协议。node.js是否希望URL中包含协议?http.get('http://191...
您是否打算使用本地网络地址192.168.x.x?@DrakaSAN您仍然使用191作为第一个地址字节,但我非常怀疑您的地址以192开头-以191开头的地址是公共地址。因此,现在您正在向internet上的某个随机机器发送请求。请检查并重试100%确保您使用的地址正确。