簡體   English   中英

Node.js HTTPS請求Quandl API

[英]Node.js HTTPS Request for Quandl API

我正在使用IBM Bluemix為學校項目提供Web服務。

我的項目需要從兩個API請求JSON數據,以便在項目中使用。

第一個是http.request ,我執行得很好。 但是,對於第二個,我需要一個https.request這就是麻煩所在。

我不知道如何通過https請求get JSON。 我一直在嘗試為http代碼改編代碼,但是我的努力變得毫無用處。

如何通過https請求JSON?

這是我的.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'); //HTTPS request var https = require('https'); var https = require('https'); var fs = require('fs'); // 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"]; obj=req.query; DolarUsuario=obj['dolar']; RealUsuario=Number(obj['dolar'])*CotacaoDolar; EuroUsuario=obj['euro']; RealUsuario2=Number(obj['euro'])*CotacaoEuro; Oi=1*VariacaoDolar; Oi2=1*VariacaoEuro; if (VariacaoDolar<0) { recomend= "Recomenda-se, portanto, comprar dólares."; } else if (VariacaoDolar=0){ recomend=""; } else { recomend="Recomenda-se, portanto, vender dólares."; } if (VariacaoEuro<0) { recomend2= "Recomenda-se, portanto, comprar euros."; } else if (VariacaoEuro=0){ recomend2=""; } else { recomend2="Recomenda-se,portanto, vender euros."; } res.render('cotacao_response.jade', { 'CotacaoDolar':CotacaoDolar, 'VariacaoDolar':VariacaoDolar, 'Atualizacao':Atualizacao, 'RealUsuario':RealUsuario, 'DolarUsuario':DolarUsuario, 'CotacaoEuro':CotacaoEuro, 'VariacaoEuro':VariacaoEuro, 'RealUsuario2':RealUsuario2, 'recomend':recomend, 'recomend2':recomend2, 'Oi':Oi, 'Oi2':Oi2 }); app.get('/home2', function (req,res) { https.get('https://www.quandl.com/api/v3/datasets/BCB/432.json?api_key=YOUR_API_KEY', function (res3) { var body = ''; res3.on('data', function (chunk) { body += chunk; }); res3.on('end', function () { var x=json.dataset.data[0][1]; console.log("My JSON is "+x); }); }); }); }); }); }); 

您的https.get應該可以按設置工作。 您的代碼還有一些其他問題導致代碼中斷,以下是我在概述時進行的解釋:

1. /home2路由的潛在錯誤嵌套

您對/home2路由的聲明位於/home1路由的聲明內。 您可能是說它在外面。 我已經在下面的代碼中修復了這個問題(並修復了一些縮進問題)。

2. json在/home2路由的https.get回調中未定義

變量jsonhttps.get回調函數中使用之前https.get 您將需要類似於http.get回調中的http.getvar json = JSON.parse(body);

這是路線的固定代碼

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"];

            obj=req.query; 

            DolarUsuario=obj['dolar'];
            RealUsuario=Number(obj['dolar'])*CotacaoDolar;

            EuroUsuario=obj['euro'];
            RealUsuario2=Number(obj['euro'])*CotacaoEuro;

            Oi=1*VariacaoDolar;
            Oi2=1*VariacaoEuro;

            if (VariacaoDolar<0) {
                recomend= "Recomenda-se, portanto, comprar dólares.";
            }

            else if (VariacaoDolar=0){
                recomend="";
            }

            else {
                recomend="Recomenda-se, portanto, vender dólares.";
            }

            if (VariacaoEuro<0) {
                recomend2= "Recomenda-se, portanto, comprar euros.";
            }

            else if (VariacaoEuro=0){
                recomend2="";
            }
            else {
                recomend2="Recomenda-se,portanto, vender euros.";
            }

            res.render('cotacao_response.jade', {
               'CotacaoDolar':CotacaoDolar,
               'VariacaoDolar':VariacaoDolar,
               'Atualizacao':Atualizacao,
               'RealUsuario':RealUsuario,
               'DolarUsuario':DolarUsuario,
               'CotacaoEuro':CotacaoEuro,
               'VariacaoEuro':VariacaoEuro,
               'RealUsuario2':RealUsuario2,
               'recomend':recomend,
               'recomend2':recomend2,
               'Oi':Oi,
               'Oi2':Oi2
            });
        });
    });
});

app.get('/home2', function (req,res) {
    https.get('https://www.quandl.com/api/v3/datasets/BCB/432.json?api_key=YOUR_API_KEY', function (res3) {
        var body = '';

        res3.on('data', function (chunk) {
            body += chunk;
        });

        res3.on('end', function () {
            var json = JSON.parse(body);
            var x=json.dataset.data[0][1];
            console.log("My JSON is "+x);
            res.send('done https: JSON result: '+x);
        });
    });
});

最后說明

您已在https URL中添加了API密鑰。 如果涉及敏感信息,我建議更改密鑰。

HTTPS服務器和客戶端API與HTTP API幾乎相同,實際上,客戶端API是相同的,並且HTTPS服務器的不同之處僅在於它需要證書文件。

啟動服務器

要啟動HTTPS服務器,您需要讀取私鑰和證書。 請注意,在這種情況下使用readFileSync,因為在服務器啟動時阻止讀取證書是可以接受的:

// HTTPS
var https = require('https');
// read in the private key and certificate
var pk = fs.readFileSync('./privatekey.pem');
var pc = fs.readFileSync('./certificate.pem');
var opts = { key: pk, cert: pc };
// create the secure server
var serv = https.createServer(opts, function(req, res) {
  console.log(req);
  res.end();
});
// listen on port 443
serv.listen(443, '0.0.0.0');

請注意,在Linux上,您可能需要以更高的特權運行服務器以綁定到端口443。除了需要讀取私鑰和證書之外,HTTPS服務器的工作方式類似於HTTP服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM