gpt4 book ai didi

javascript - 如何让 'get' 请求在 NodeJS 中按计划运行?

转载 作者:行者123 更新时间:2023-12-01 00:19:01 26 4
gpt4 key购买 nike

函数我希望这个函数按时间间隔自行运行。现在我必须访问“/getCompanyInfo”路径才能触发它。我希望它每分钟运行一次,就好像我每分钟都访问“/getCompanyInfo”路径一样。该应用程序位于 Heroku 上,我希望该功能能够在不打开任何页面的情况下执行。

原来的函数是通过访问路径触发的。

const express = require('express');
const app = express();

/**
* getCompanyInfo ()
*/
app.get('/getCompanyInfo', function(req,res){

const companyID = oauthClient.getToken().realmId;
console.log(companyID)
const url = OAuthClient.environment.production ;

oauthClient.makeApiCall({url: url + 'v3/company/0000000000/salesreceipt/8?minorversion=41'})
.then(function(authResponse){
console.log("The response for API call is :"+JSON.parse(JSON.stringify(authResponse)));
res.send(authResponse);
})
.catch(function(e) {
console.error(e);
});
});

我在这里的尝试之一是将其放入一个使用 Node 计划每分钟执行一次的函数中。
除了打印“这将每分钟运行一次”之外,它不执行任何操作。到控制台。我尝试删除

app.get(function(req,res){  

})

在它下面,但这使得应用程序(托管在 Heroku 上)无法构建。

const express = require('express');
const app = express();

var schedule = require('node-schedule');

var j = schedule.scheduleJob('* * * * *', function(){
console.log('This will run once a minute.');
app.get(function(req,res){

const companyID = oauthClient.getToken().realmId;
console.log(companyID)
const url = OAuthClient.environment.production ;

oauthClient.makeApiCall({url: url + 'v3/company/0000000000/salesreceipt/8?minorversion=41'})
.then(function(authResponse){
console.log("The response for API call is :"+JSON.parse(JSON.stringify(authResponse)));
res.send(authResponse);
})
.catch(function(e) {
console.error(e);
});
});

});

更多背景:它位于我在 Heroku 上的一个应用程序中。我想将应用程序设置为每 x 次从 API 发出 JSON 数据请求,而无需我触摸它。

最佳答案

app.get 初始化 api 处理程序 - 例如这是您的 api 路由定义 - 当您通过网络浏览器或其他客户端调用 GET/getCompanyInfo 时将响应的内容。您不应该根据计划的操作定期重新定义它。

删除路由处理程序后构建失败可能是因为留下了 res.send(authResponse);

你可以有这样的东西:

// function that will be used to get the data
const getCompanyInfo = (done) => {
const companyID = oauthClient.getToken().realmId
console.log(companyID)
const url = OAuthClient.environment.production

oauthClient.makeApiCall({url: url + 'v3/company/0000000000/salesreceipt/8?minorversion=41'})
.then((authResponse) => {
console.log("The response for API call is :"+JSON.parse(JSON.stringify(authResponse)))
done(authResponse)
})
.catch((e) => {
console.error(e)
})
}

// this will trigger the function regularly on the specified interval
const j = schedule.scheduleJob('* * * * *', () => {
getCompanyInfo((companyInfo) => {
// ...do whatever you want with the info
})
})

// this will return you the data by demand, when you call GET /getCompanyInfo via browser
app.get('/getCompanyInfo', function(req,res) {
getCompanyInfo((companyInfo) => {
res.send(companyInfo)
})
})

关于javascript - 如何让 'get' 请求在 NodeJS 中按计划运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com