我在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 /主机和端口的任何方法吗?
更新
主机名(https://nameofapp.herokuapp.com/
)实际上起作用。但是有什么方法可以在不认识房东的情况下给自己打电话吗?
答案 0 :(得分:1)
您可以使用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
),并使用它来获取主机