刷新快递页面有问题

时间:2017-09-12 09:36:14

标签: javascript express

我似乎在刷新页面时遇到了一些问题。我在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。

任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

使用res.render结束使用JADE,如果没有收到日志的最后一条消息,则将元标记插入到网页中。并删除元标记(如果有)。这具有期望的效果。一旦加载/日志,它现在每2秒更新一次页面,直到最后一条消息出现并且更新停止。