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.