我似乎在刷新页面时遇到了一些问题。我在HTML页面上填写一个表单,然后通过Node RequestJS模块发布到不同服务上的API。发送帖子后,其他服务会自行执行一些工作,并使用get请求来检索已完成工作的ID。
一旦我有了这个ID,我就用它来启动另一个获取请求,获取完成工作的日志。当然日志仍然在那时填充,所以我想要一个功能刷新网页,这是一个简单的expressjs服务页面,而不是一个真正的HTML,直到它得到日志完成的消息。
然而,我现在的主要问题是让刷新本身实际工作。
main.js 中的代码(连接到HTML页面)
request({
url: 'http://'+host+'/hwChange',
method: "POST",
headers: {
"content-type": "application/json",
},
body: jSON
})
setTimeout(function(){
request({
url: 'http://'+host+'/lastWF',
method: "GET",
})
}, 1000)
setTimeout(function(){location.href='/log'}, 2000)
timer = 2000
for ( i=0;i<30;i++){
timer = timer+2000
setTimeout(function(){
request({
url: 'http://'+host+'/log',
method: "GET"
})
},timer)
}
我的 expressjs (服务器端)中的代码
app.post('/hwChange', jsonParser, function (req,res) {
if (!req.body) return res.sendStatus(500)
request({
url: 'https://'+user+':'+pass+'@orcprod.adeo.no:443/vco/api/workflows/9edb9c28-2e71-4d41-a789-f7d94ee4128a/executions',
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify(req.body)
}, function (error, response, body){
console.log(response)
})
})
app.get('/lastWF', function (req,res){
request.get('https://'+user+':'+pass+'@orcprod.adeo.no:443/vco/api/workflows/9edb9c28-2e71-4d41-a789-f7d94ee4128a/executions', function (error, response, body){
if (!error && response.statusCode == 200) {
//console.log(body)
}
var newest = JSON.parse(body)
newest = newest.relations.link
var arr = []
for (var i = newest.length - 1; i >= 2; i--) {
var now = newest[i].attributes[1].value
arr.push(new Date(now))
}
var maxDate = new Date(Math.max.apply(null, arr))
for (var i = newest.length - 1; i >= 2; i--) {
var now = newest[i].attributes[1].value
if ( new Date(now).getTime() == maxDate.getTime() ) {
WFid = newest[i].attributes[0].value
}
}
res.end("<BR><BR>All done!")
})
})
app.get('/log', function (req, res) {
request.get('https://'+user+':'+pass+'@orcprod.adeo.no:443/vco/api/workflows/9edb9c28-2e71-4d41-a789-f7d94ee4128a/executions/'+WFid+'/logs', function (error, response, body){
if (!error && response.statusCode == 200) {
//console.log(body)
}
var logs = JSON.parse(body)
for ( i = logs.logs.length -1 ; i>=0; i-- ){
res.write(logs.logs[i].entry["short-description"]+"<BR>")
}
res.end("Done "+WFid)
})
})
我尝试在main.js中使用location.reload,以及location = location.href,但它似乎不起作用。我认为刷新过快的原因太快了,所以我尝试用循环来减慢它的速度。
在我发布的代码中,我认为我的定时刷新循环导致了位于其上方的location.href。
任何指针都会受到赞赏。
答案 0 :(得分:0)
使用res.render结束使用JADE,如果没有收到日志的最后一条消息,则将元标记插入到网页中。并删除元标记(如果有)。这具有期望的效果。一旦加载/日志,它现在每2秒更新一次页面,直到最后一条消息出现并且更新停止。