Закажите себя в Nodejs, развернутом на Heroku - PullRequest
0 голосов
/ 02 сентября 2018

У меня установлено приложение Node Express на Heroku. На главной странице требуется около 50 HTTP-запросов к внешним службам для отображения данных. Запросы занимают так много времени, поэтому я использую кеш.

Теперь я периодически запрашиваю у себя веб-страницу, чтобы заставить Node продолжать обновлять и кэшировать данные. Таким образом, пользователю не нужно ждать 1 минуту, чтобы увидеть страницу.

Следующий код прекрасно работает на локальном компьютере. Но в производственной среде (Heroku) я получаю Error: connect ECONNREFUSED

setInterval(function() {
  var url = "http://127.0.0.1:" + (process.env.PORT || 3000);
  try {
    http.get(url, {})
  } catch (err) {
    console.error('Error refreshing data')
    console.error(err)
  }
}, 1 * 60 * 1000)

Я пробовал:

  • http://127.0.0.1:" + (process.env.PORT || 3000)
  • https://127.0.0.1:" + (process.env.PORT || 3000)
  • 0.0.0.0

Есть ли способ найти правильный ip / host и порт?

UPDATE

Имя хоста (https://nameofapp.herokuapp.com/) действительно работает. Но есть ли способ позвонить себе, не зная хозяина?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете использовать Сам запрос

Попробуйте этот код:

const requestMyself = require('request-myself');
const option = {
    hostname: process.env.BASE_URL,
    timeout: process.env.TIME_IDLING
};

app.use(requestMyself(option, (error, res) => {
    if (error) {
        console.error('RequestMyself error:', error);
    } else {
        console.info('RequestMyself statusCode:', res.statusCode);
    }
}));

установите переменную среды BASE_URL - это URL вашего приложения, TIME_IDLING - время ожидания для запроса (или вы можете изменить его при определении option)

Если у вас есть проблемы, вы можете создать проблему

Отметьте dyno-metadata , чтобы автоматически сгенерировать HEROKU_APP_NAME и некоторые env (process.env.HEROKU_APP_NAME), используйте его для получения вашего хоста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...