我试图每小时收到一次请求。一旦我setInterval
,它就会变为应用程序错误,返回503服务不可用。请帮忙!
我的代码:
var express = require('express');
var request = require('request');
var app = express();
var options = {
url: 'myURL.com',
headers: {
'X-API-KEY': 'key',
'Accept': 'application/json'
}
};
app.use(express.static('public'));
function getData() {
app.get('/', function (req, res) {
request(options, function (error, response, body) {
if (!error && response.statuscode == 200) {
res.send(extractinfo(json.parse(body)));
} else if (!error) {
res.status(response.statuscode).send([]);
} else {
res.send([]);
}
});
});
}
setInterval(getData, 1000*60*60);
编辑:我的请求将在正文中返回JSON(如果我没有setInterval,它会返回)。
[
{
"Course_Schedule_ID":"20",
"Course_Name":"History of Music",
"Start_Date":"2016-02-16",
"Start_Time":"19:30:00"
},
{
"Course_Schedule_ID":"21",
"Course_Name":"Science Discovery",
"Start_Date":"2016-02-21",
"Start_Time":"14:00:00"
}
]
答案 0 :(得分:0)
您只需要设置一次服务。您应该只在应用程序启动时拨打app.get('/', ...)
个电话,而不是每小时拨打一次电话。
让app.get
侦听器提供最新版本的数据,并使用单独的代码更新最新数据。
var latestData = {
data: [],
status: 200
};
app.get('/', function (req, res) {
res.status(latestData.status).send(latestData.data);
});
// update outer latestData
function getData(callback) {
request(options, function (error, response, body) {
if (!error && response.statuscode == 200) {
latestData = {
data: extractinfo(json.parse(body)),
status: 200
};
} else if (!error) {
latestData = {
data: [],
status: response.statuscode
};
} else {
latestData = {
data: [],
status: 200
};
}
});
}
setInterval(getData, 1000*60*60);
// call `getData` immediately so we don't wait an hour for real data
getData();