2016-04-16 15 views
-1

変数「vSave」にデータをロードするにはどうすればよいですか。これはJavascriptが私を混乱させるところです。それは返されるとき、私はこのvSaveを書いた方法は未定義ですが、私はresponse.on( 'end')が動いていて、私が探しているデータがあることを知っています。私はちょうどそれが私のクライアント側でそれを使用することができるように私のルータに戻って取得する方法を知りません。JavaScriptの値は未定義で、値が割り当てられた後に関数が実行されます

var express = require('express'); 
var router = express.Router(); 
var parseString = require('xml2js').parseString; 
var config = require('../config_bartapi'); 
var http = require('http'); 
var vTemp; // [DEBUG] 
var vSave; // [DEBUG] 
// Real Time Departure from a given station 
router.route('/departTimeStation') 
    .get(function(req, res) { 
     var vParsed = ''; 
     vCmd = 'etd'; 
     vOrig = req.query.vOriginStation; 
     vDir = 'n'; // [NOTE] - 'n' or 's', north or south, OPTIONAL 
     vPlat = 1; // [NOTE] - 1 to 4, number of platform, OPTIONAL 

     var xoptions = { 
      host: 'api.bart.gov', 
      path: '/api/etd.aspx?cmd=' + vCmd + '&orig=' + vOrig + '&key=' + config.bart.client 
     }; 

     var xcallback = function(response) { 
      response.on('data', function(chunk) { 
       vParsed += chunk; 
      }); 
      response.on('end', function() { 
       parseString(vParsed, function(err, result) { 
        vSave = JSON.stringify(result.root.station); 
       }); 
      }); 
     }; 
     var vTestHttp = http.request(xoptions, xcallback).end(); 
     return res.send (vSave); 
    }); 
// list all BART stations 
router.route('/listAllStations') 
    .get(function(req, res) { 
     var vParsed = ''; 
     vCmd = 'stns'; 
     var options = { 
      host: 'api.bart.gov', 
      path: '/api/stn.aspx?cmd=' + vCmd + '&key=' + config.bart.client 
     }; 
     var callback = function(response) { 
      response.on('data', function(chunk) { 
       vParsed += chunk; 
      }); 

      response.on('end', function() { 
       parseString(vParsed, function(err, result) { 
        vTemp = result.root.stations[0].station; 
       }); 
      }); 
     }; 
     var vTestHttp2 = http.request(options, callback).end(); 
     return res.send (vTemp) 
    }); 
module.exports = router; 

ありがとうございました。それは簡単なコンセプトのようですが、私はそれを得ることができません。

私は編集する必要がありました。これは完全なコードです。私はもともと1つのモジュールだけを投稿しました。極端な編集をして申し訳ありません。

+2

コールバックがまだ実行されていないため、その時点でvSaveを返すことはできません。後で非同期に実行されます。 – trincot

+0

どのように応答を待つのだろうか?それは動作していませんが、私は動作する方法でそれを変更する方法がわかりません。 'listAllStations'ルートは毎回動作しますが、 'departTimeStation'は決して動作しません。それは複数のhttp.requestが私を乱しているようです。 – Trewaters

答えて

0

parseString()関数に渡すコールバックで送信しようとします。

+0

それは魅力的に機能しました。私はそれをテストし続けますが、最初の走りは美しいものでした。私はまもなくこれを答えとして受け入れます。スタックは答えを受け入れるのに5分待つ – Trewaters

関連する問題