Node Express Получить запрос, передавая пользовательский заголовок - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь сделать запрос get эквивалентным этому jQuery:

  $.ajax({
    headers: { 'X-Auth-Token': 'YOUR_API_KEY' },
    url: 'http://api.football-data.org/v2/competitions/BL1/standings',
    dataType: 'json',
    type: 'GET',
  }).done(function(response) {       
    console.log(response);
  });

Однако я не понял, как это сделать с помощью nodejs - express.Этот код взят из модуля API-маршрутов, прикрепленного к основному приложению.Запрос, кажется, работает, собирая данные, но не заканчивается.Кроме того, я не вижу пользовательский заголовок в запросе при проверке из браузера.

   app.get('/api/:league', function(req, res, next) {

      var apiKey = process.env.API_KEY;    
      let url = 'api.football-data.org';

      var options = {
        host: url,
        method: 'GET',
        path: 'v2/competitions/BL1/standings',
        headers: {
          'X-Auth-Token': apiKey
        }
      };

      let data = "";
      var getReq = http.request(options,function(resp){

         console.log("Connected");        
         resp.on("data", chunk => {
          data += chunk;
         });

         resp.on("end", () => {
           console.log("data collected");
         });
      });

      getReq.on("error", (err) => console.log("OOPS!", err));

      getReq.end(JSON.stringify(data));

  })    

Ссылка на проект

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Функция jQuery ajax не имеет опции headers.Вы можете прочитать об этой функции на официальном документе http://api.jquery.com/jquery.ajax/.Они настраивают заголовок запроса с помощью функции beforeSend:

$.ajax({
    beforeSend: function (request) {
        request.setRequestHeader("X-Auth-Token", 'YOUR_API_KEY');
    },
    url: 'http://api.football-data.org/v2/competitions/BL1/standings',
    dataType: 'json',
    type: 'GET',
}).done(function (response) {
    console.log(response);
});

С помощью http node lib вы можете передать этот пример

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    // TODO: send data to client
    // res.status(200).json(JSON.stringify(body.toString()))
    console.log(body.toString());
  });
});

req.end();
0 голосов
/ 23 октября 2018

Попробуйте использовать пакет запроса-обещания npm. https://www.npmjs.com/package/request-promise

var rp = require(request-promise);

const baseUrl = 'api.football-data.org/v2/competitions/BL1/standings';
const apiKey = process.env.API_KEY;

var options = {
  method: 'GET',
  uri: baseUrl,
  headers: {
      'X-Auth-Token': apiKey
  },
  json: true
};

rp(options)
.then(function (response) {
  console.log(response)
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...