Получить данные из API, используя запрос-обещание и express - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь получить в ответ данные, хранящиеся в моем api url.

Внутри маршрутизатора я использую обещание запроса для получения данных из URL.

router.get("/", function(req, res) {
  let uri = 'http://localhost:3000/api/v1/donations';

  let _include_headers = function(body, response, resolveWithFullResponse) {
    return {'headers': response.headers, 'data': body};
  };

  let options = {
    method: 'GET',
    uri: uri,
    json: true,
    transform: _include_headers,
  }

  return request(options)
  .then(function(response) {
    console.log(response.headers);
    console.log(response.data);
  });
});

пока я получаю эту ошибку Unhandled rejection RequestError: Error: socket hang up.

Я новичок ie и не знаю, что означает эта ошибка? и что я делаю не так?

Помощь была бы драгоценной.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Требуется обработать ошибку по запросу: Проверить ошибку в блоке перехвата.

.catch(error => {
    console.error(error)
    res.status(403).send({message: error.message})
  });

Необходимо перезапустить ответ:

 res.send(response.data)

Завершено:

router.get("/", function (req, res) {
  let uri = "http://localhost:3000/api/v1/donations";
  let _include_headers = function (body, response, resolveWithFullResponse) {
    return { headers: response.headers, data: body };
  };
  let options = {
    method: "GET",
    uri: uri,
    json: true,
    transform: _include_headers,
  };
  request(options).then(function (response) {
    res.send(response.data)
  }).catch(error => {
    res.status(403).send({message: error.message})
  });
});
0 голосов
/ 28 апреля 2020

Когда вы используете .then, вам также нужно использовать .catch Код в .then запускается, когда все в порядке, и код в .catch запускается, когда возникает ошибка. В вашем случае ошибка происходит, но нет кода, который запускается для этого. Что вам нужно сделать, это:

return request(options)
  .then(function(response) {
    console.log(response.headers);
    console.log(response.data);
  })
  .catch(function(error){
    console.error('An error occured: ' + error);
  });

Но это просто изящная обработка ошибки. Что вы делаете с этой ошибкой "Socet Hang Up"? По сути, это означает, что программное обеспечение, к которому вы обращаетесь с запросом (то, что на http://localhost: 3000 / api / v1 / donations ), принимает ваше соединение, но не отправляет никакого ответа в данное время ( обычно 30 se c). Проблема в том, что другое программное обеспечение.

И еще одна проблема, которую я вижу в коде тура, заключается в том, что вам нужно выполнить res.send() или res.end() где-то в вашем коде, иначе пользователь получит ошибку, пустая страница или страница с бесконечной загрузкой.

...