2016-08-07 51 views
0

Ich rufe eine Webadresse als URL-Parameter ab und zeige dann an, ob die Adresse einen Statuscode von 200 zurückgibt oder nicht. Das Problem ist, es scheint nur nach ein paar Sekunden zu funktionieren - beim ersten Mal scheint der Code, der 'mystatus' zuweist, nicht richtig zu funktionieren. Ich habe das Gefühl, dass es ein Problem mit der Reihenfolge gibt, in der ich die Dinge leite, aber ich bin mir nicht sicher, wie ich das beheben soll.Definieren der Reihenfolge der Vorgänge in einer http.get() -Anforderung - sync/async-Problem

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

Antwort

0

Du läufst Code Knoten in dem Versprechen, so dass beiden http.get und res.json an der exakt gleichen Zeit ausgeführt werden, so je nachdem, welche man zuerst fertig ist es egal.

Bewegen Sie den res.json Antwort in das Versprechen Körper http.get so wird es die Antwort senden, wenn sie es

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") 
}); 
bekommt