2016-08-07 5 views
0

WebアドレスをURLパラメータとして取得し、アドレスが200のステータスコードを返すかどうかを表示します。問題は、ほんの数秒後にしか動作しないようだ - 私が最初に実行すると、 'mystatus'を割り当てるコードが正しく動作していないように見える。私は物事を実行している順序に問題があるように感じるが、私はそれを修正する方法がわからない。http.get()リクエスト - 同期/非同期の問題で操作の順序を定義する

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

答えて

0

あなたは約束であなたのコードのノードを実行しているので、両方http.getres.jsonは正確に同時に実行されているので、どちらか一つは最初、それは問題ではありません終了します。

それ

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") 
}); 
取得するときには、応答を送信します http.getの約束本体に res.json応答を移動