2015-12-08 33 views
29

私は学校のプロジェクトのためのWebサービスを作るためにIBM Bluemixを使用しています。ノード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

Googleからの解決策を探している人に...あなたはHTTPS要求をhttp.Agentを使用していないか、このエラーメッセージが表示されますことを確認してください。

+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); 
});