2015-12-08 93 views
29

我正在使用IBM Bluemix为学校项目制作Web服务。节点js错误:不支持协议“https:”。预计“http:”

我的项目需要从API请求一个JSON,所以我可以使用它提供的数据。我对数据集使用了http get方法,但我不确定它是否正常工作。

当我运行我的代码,我得到的消息:

Error: Protocol "https:" not supported. Expected "http:"

什么原因造成的,我该如何解决呢?

这里是我的.js文件:

// Hello. 
 
// 
 
// This is JSHint, a tool that helps to detect errors and potential 
 
// problems in your JavaScript code. 
 
// 
 
// To start, simply enter some JavaScript anywhere on this page. Your 
 
// report will appear on the right side. 
 
// 
 
// Additionally, you can toggle specific options in the Configure 
 
// menu. 
 

 
function main() { 
 
    return 'Hello, World!'; 
 
} 
 

 
main();/*eslint-env node*/ 
 

 
//------------------------------------------------------------------------------ 
 
// node.js starter application for Bluemix 
 
//------------------------------------------------------------------------------ 
 

 
// HTTP request - duas alternativas 
 
var http = require('http'); 
 
var request = require('request'); 
 

 
// cfenv provides access to your Cloud Foundry environment 
 
// for more info, see: https://www.npmjs.com/package/cfenv 
 
var cfenv = require('cfenv'); 
 

 
//chama o express, que abre o servidor 
 
var express = require('express'); 
 

 
// create a new express server 
 
var app = express(); 
 

 
// serve the files out of ./public as our main files 
 
app.use(express.static(__dirname + '/public')); 
 

 
// get the app environment from Cloud Foundry 
 
var appEnv = cfenv.getAppEnv(); 
 

 
// start server on the specified port and binding host 
 
app.listen(appEnv.port, '0.0.0.0', function() { 
 
    // print a message when the server starts listening 
 
    console.log("server starting on " + appEnv.url); 
 
}); 
 

 

 
app.get('/home1', function (req,res) { 
 
    http.get('http://developers.agenciaideias.com.br/cotacoes/json', function (res2) { 
 
     var body = ''; 
 
     res2.on('data', function (chunk) { 
 
      body += chunk; 
 
     }); 
 
     res2.on('end', function() { 
 
      var json = JSON.parse(body); 
 
      var CotacaoDolar = json["dolar"]["cotacao"]; 
 
      var VariacaoDolar = json["dolar"]["variacao"]; 
 
      var CotacaoEuro = json["euro"]["cotacao"]; 
 
      var VariacaoEuro = json["euro"]["variacao"]; 
 
      var Atualizacao = json["atualizacao"]; 
 
\t \t \t 
 
\t \t \t obj=req.query; 
 
\t \t \t 
 
\t \t \t DolarUsuario=obj['dolar']; 
 
\t \t \t RealUsuario=Number(obj['dolar'])*CotacaoDolar; 
 
\t \t \t 
 
\t \t \t EuroUsuario=obj['euro']; 
 
\t \t \t RealUsuario2=Number(obj['euro'])*CotacaoEuro; 
 
\t \t \t 
 
\t \t \t Oi=1*VariacaoDolar; 
 
\t \t \t Oi2=1*VariacaoEuro; 
 
\t \t \t 
 
\t \t \t if (VariacaoDolar<0) { 
 
\t \t \t recomend= "Recomenda-se, portanto, comprar dólares."; 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t else if (VariacaoDolar=0){ 
 
\t \t \t \t recomend=""; 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t else { 
 
\t \t \t \t recomend="Recomenda-se, portanto, vender dólares."; 
 
\t \t \t \t } 
 
\t \t \t \t 
 
\t \t \t if (VariacaoEuro<0) { 
 
\t \t \t recomend2= "Recomenda-se, portanto, comprar euros."; 
 
\t \t \t } 
 
\t \t \t 
 
\t \t \t else if (VariacaoEuro=0){ 
 
\t \t \t \t recomend2=""; 
 
\t \t \t } 
 
\t \t \t else { 
 
\t \t \t \t recomend2="Recomenda-se,portanto, vender euros."; 
 
\t \t \t \t } \t 
 
\t \t \t \t 
 
\t \t \t res.render('cotacao_response.jade', { 
 
        \t \t 'CotacaoDolar':CotacaoDolar, 
 
\t \t \t \t \t \t 'VariacaoDolar':VariacaoDolar, 
 
\t \t \t \t \t \t 'Atualizacao':Atualizacao, 
 
\t \t \t \t \t \t 'RealUsuario':RealUsuario, 
 
\t \t \t \t \t \t 'DolarUsuario':DolarUsuario, 
 
\t \t \t \t \t \t 'CotacaoEuro':CotacaoEuro, 
 
\t \t \t \t \t \t 'VariacaoEuro':VariacaoEuro, 
 
\t \t \t \t \t \t 'RealUsuario2':RealUsuario2, 
 
\t \t \t \t \t \t 'recomend':recomend, 
 
\t \t \t \t \t \t 'recomend2':recomend2, 
 
\t \t \t \t \t \t 'Oi':Oi, 
 
\t \t \t \t \t \t 'Oi2':Oi2 
 
      }); 
 
\t \t \t 
 
\t \t app.get('/home2', function (req,res) { 
 
    http.get('https://www.quandl.com/api/v3/datasets/BCB/432.json?api_key=d1HxqKq2esLRKDmZSHR2', function (res3) { 
 
     var body = ''; 
 
     res3.on('data', function (chunk) { 
 
      body += chunk; 
 
     }); 
 
\t \t res3.on('end', function() { 
 
      var x=json.dataset.data[0][1]; 
 
     console.log("My JSON is "+x); }); 
 
     
 
    }); 
 
    }); 
 
     }); 
 
    }); 
 
});z

以下是错误屏幕打印,我得到:enter image description here

回答

72

当你想要求一个HTTPS资源,您需要使用https.get,而不是http.get

https://nodejs.org/api/https.html

+50

这个决定为什么推送给用户?似乎解析协议并在幕后使用适当的功能是合理的。 –

+1

呃,好吗?我不明白为什么这是由用户决定的。 – BastiBen

14

作为一个侧面说明,以任何希望从谷歌的解决方案......确保你使用的不是http.Agent与HTTPS请求,否则你会得到这个错误。

+0

这是我的,谢谢! – rocketmonkeys

6

此错误的原因是您尝试从HTTP客户端调用HTTPS URI。理想的解决方案应该是为通用模块找出URI协议并决定在内部使用HTTPS或HTTP。

我克服这个问题的方法是通过我自己的开关逻辑。 下面是一些代码,为我做了切换。

var http = require('http'); 
var https = require('https'); 
// Setting http to be the default client to retrieve the URI. 
var url = new URL("https://www.google.com") 
var client = http; 
// You can use url.protocol as well 
if (url.toString().indexOf("https") === 0){ 
      client = https; 
} 
// Now the client is loaded with the correct Client to retrieve the URI. 
var req = client.get(url, function(res){ 
    // Do what you wanted to do with the response 'res'. 
    console.log(res); 
}); 
相关问题