javascript - 在部署在 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)
我努力了:
http://127.0.0.1:" + (process.env.PORT || 3000)
https://127.0.0.1:" + (process.env.PORT || 3000)
0.0.0.0
有什么方法可以找到正确的 ip/host 和端口?
更新
主机名 ( https://nameofapp.herokuapp.com/
) 实际上有效。但是有什么方法可以在不知道宿主的情况下调用自己?
解决方案
你可以使用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
和一些env
(process.env.HEROKU_APP_NAME
),用它来获取你的主机
推荐阅读
- sql - 向密集秩函数添加条件子句(Where)
- cartopy - cartopy Geodesics 函数返回 NaN 数组的 MemoryViews
- sql - 从选择中排除空列
- haskell - Haskell 没有 Integral Double 的实例
- c# - 如何在 Rest API 中传递 JSON 数组和对象
- c - sys_timeout() 处的无限循环 - LWIC/src/core/timeouts.c
- r - Purrr - 当存在时有条件地改变数据框列表中的列
- ios - 如何在我的文本字段中添加顶部填充(Objective-c)
- python-3.x - 无法从 yaml 文件设置环境变量
- python - 是否可以根据熊猫中的连接字符串创建数据框名称?