Как отладить Ошибка: getaddrinfo ENOTFOUND на запрос безопасного API - PullRequest
0 голосов
/ 30 июня 2019

Я создаю прототип приложения, используя API YNAB (вам нужен бюджет) и ngrok на порту 3000, и получаю сообщение об ошибке ниже. В настоящее время я только настраиваю базовую маршрутизацию, но не могу успешно получить токен доступа и заставить браузер перенаправить обратно на мой маршрут / app. Ошибка ниже - лог консоли; Я также получаю 502 в браузере.

{ Error: getaddrinfo ENOTFOUND https://app.youneedabudget.com https://app.youneedabudget.com:443
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26)
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'https://app.youneedabudget.com',
  host: 'https://app.youneedabudget.com',
  port: 443 }

Документация по API, которую я использую для запросов ONuth от YNAB, может быть найдена здесь . Я использую ngrok с именем хоста https://ynag.ngrok.io, и я настроил свои URL перенаправления как:

https://ynag.ngrok.io/oauth/token

https://ynag.ngrok.io/app

https://ynag.ngrok.io/oauth/redirect

Я использую команду экспорта в терминале, чтобы добавить свой идентификатор клиента и секрет, и успешно перейти на страницу входа в YNAB для API, получить код авторизации и перенаправить на «/ oauth / token» (как проверено в журналах моей консоли и открывается страница авторизации), но после нажатия «Авторизовать», чтобы получить токен доступа и перенаправить на мой маршрут «/ app», я получаю сообщение об ошибке выше, и страница либо не перенаправляет, либо обозначает Bad Gateway 502.

// index.js

const express = require('express');
const querystring = require('querystring');
const https = require('https');
const morgan = require('morgan');

const clientID = process.env.clientID;
const clientSecret = process.env.clientSecret;
const codeRedirect = encodeURI('https://ynag.ngrok.io/oauth/token');
const tokenRedirect = encodeURI('https://ynag.ngrok.io/app');

const app = express();
const port = process.env.PORT || 3000;

let authCode;

app.use(morgan('dev'));

// Home Route
app.get('/', (req, res) => {
  res.send('App Home');
});

// Obtain Authorization Code
app.get('/oauth/redirect', (req, res) => {

  res.redirect(`https://app.youneedabudget.com/oauth/authorize?client_id=${clientID}&redirect_uri=${codeRedirect}&response_type=code`);

});

// Obtain Access Token
app.get('/oauth/token', (req, res) => {

  authCode = req.query.code;
  console.log(`Client ID: ${clientID} \nClient Secret: ${clientSecret} \nAuthorization Code: ${authCode}`);

  let post_data = querystring.stringify({
    'client_id': clientID,
    'client_secret': clientSecret,
    'redirect_url': tokenRedirect,
    'grant_type': 'authorization_code',
    'code': authCode
  });

  let post_options = {
    host: 'https://app.youneedabudget.com',
    path: `/oauth/token?client_id=${clientID}&client_secret=${clientSecret}&redirect_uri=${tokenRedirect}&grant_type=authorization_code&code=${authCode}`,
    port: 443,
    method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': post_data.length
    }
  };

  let post_req = https.request(post_options, (res) => {
    console.log('Status: ' + res.statusCode);
    console.log('Headers: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', (response) => {
      console.log(`Response: ${response}`);
    });
  });

  post_req.on('error', (e) => {
    console.error(e);
  });

  post_req.write(post_data);
  post_req.end();

});

// Successful Login Route
app.get('/app', (req, res) => {
  res.send('Logged in.');
});

app.listen(port, () => {
  console.log(`Server listening on port ${port}.`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...