2016-08-07 1 views
0

Je récupère une adresse Web en tant que paramètre d'URL, puis j'affiche si l'adresse renvoie un code d'état de 200 ou non. Le problème, c'est que ça ne fonctionne que quelques secondes plus tard - la première fois que je l'exécute, le code assignant 'mystatus' ne semble pas fonctionner correctement. J'ai l'impression qu'il y a un problème avec l'ordre dans lequel je gère les choses, mais je ne suis pas sûr de savoir comment y remédier.Définition de l'ordre des opérations dans une demande http.get() - sync/async

var express = require("express"); 
var moment = require("moment"); 
var http = require("http"); 
var express = require("express"); 
var moment = require("moment"); 
var http = require("http"); 
var app=express(); 
var mystatus=""; 

app.get('/new/:name*', function(req,res){ 

    //detect if name is a URL 
    //return output 
    http.get("http:"+req.params[0], function(thisres){ 
     if (thisres.statusCode != 200){ 
      mystatus = "Could not load"; 
     } 
     else { 
      mystatus = "Loaded!"; 
     } 
    }).on('error', function(e){ 
     console.error(e); 
    }) 
    res.json({url_part1: req.params.name, 
     url_part2: req.params[0], 
     status: mystatus 
     }); 
}) 

app.listen(8080, function(){ 
    console.log("App listening on port 8080") 
}); 

Répondre

0

Vous utilisez votre nœud de code dans la promesse, afin que les deux http.get et res.json sont en cours d'exécution au même moment, donc selon une première ne se termine pas d'importance.

Déplacer la réponse res.json dans le corps de promesse de http.get il envoie la réponse quand il obtient

var express = require("express"); 
var moment = require("moment"); 
var http = require("http"); 
var express = require("express"); 
var moment = require("moment"); 
var http = require("http"); 
var app=express(); 
var mystatus=""; 

app.get('/new/:name*', function(req,res){ 

    //detect if name is a URL 
    //return output 
    http.get("http:"+req.params[0], function(thisres){ 
     if (thisres.statusCode != 200){ 
      mystatus = "Could not load"; 
     } 
     else { 
      mystatus = "Loaded!"; 
     } 

     res.json({url_part1: req.params.name, 
     url_part2: req.params[0], 
     status: mystatus 
     }); 
    }).on('error', function(e){ 
     console.error(e); 
    }) 
}) 

app.listen(8080, function(){ 
    console.log("App listening on port 8080") 
});