首页 > 解决方案 > 在部署在 Heroku 上的 Nodejs 中请求自己

问题描述

我在 Heroku 上部署了一个 Node Express 应用程序。主页需要大约 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)

我努力了:

有什么方法可以找到正确的 ip/host 和端口?

更新

主机名 ( https://nameofapp.herokuapp.com/) 实际上有效。但是有什么方法可以在不知道宿主的情况下调用自己?

标签: javascriptnode.jsherokuaxios

解决方案


你可以使用request-myself

试试这个代码:

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和一些envprocess.env.HEROKU_APP_NAME),用它来获取你的主机


推荐阅读