2017-09-12 2 views
0

Ich habe ein Problem mit der Aktualisierung einer Seite. Ich fülle ein Formular auf einer HTML-Seite aus, die dann über das Node RequestJS-Modul an eine API auf einem anderen Dienst sendet. Nachdem der Post gesendet wurde, führt der andere Dienst selbst einige Jobs aus, und ich benutze eine Get-Anfrage, um die ID des ausgeführten Jobs wiederherzustellen.Probleme beim Aktualisieren der Express-Seite

Sobald ich diese ID habe, benutze ich sie, um eine weitere Anfrage zu starten, die Protokolle für den Job fertig zu bekommen. Natürlich sind die Logs an diesem Punkt immer noch gefüllt, also möchte ich eine Funktion, die Webseite zu aktualisieren, die eine einfache expressjs-Seite ist, und kein echtes html, bis sie die Nachricht erhält, dass das Log abgeschlossen ist.

Mein Hauptproblem ist jetzt jedoch, die Aktualisierung selbst zu funktionieren.

Der Code in meinem main.js (auf der HTML-Seite verbunden)

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) 
} 

und der Code in meinem Express.js (Serverseite)

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) 
    }) 
}) 

Ich habe versucht, mit location.reload in main.js, sowie location = location.href, aber es scheint nicht zu funktionieren. Ich denke, es ist der Grund dafür, dass die Aktualisierung zu schnell war, also versuchte ich, sie mit einer Schleife zu verlangsamen.

In dem Code, den ich hier gepostet habe, denke ich, meine zeitgesteuerte Refresh-Schleife failes Ursache der location.href genau darüber.

Alle Hinweise würden geschätzt.

Antwort

0

Beendet mit res.render Mit JADE um ein Meta-Tag in die Webseite einzufügen, wenn die letzte Nachricht des Logs nicht empfangen wurde. Und entfernen Sie das Meta-Tag, wenn es hatte. Dies hatte den gewünschten Effekt. Nach dem Laden/Protokoll wird die Seite nun alle 2 Sekunden aktualisiert, bis das letzte Protokoll angezeigt wird und die Aktualisierungen beendet werden.

Verwandte Themen