1

ページをレンダリングする前にリクエストが完了したことを確認しようとしています

アプリの概要 - コードを使用して送信し、リクエストを作成し、結果ページに入力します

//Index.js

var response = require('./requestMapping')

// home search page
exports.index = function(req, res){
  res.render('index', { stationDisplay: response.station_id, test: 'rob' });
};

**//post from form to call METAR service
exports.post =('/', function(req, res, next) {
  response.getMETAR(req.body.query,function(){
    res.render('results', {
        stationDisplay: response.station_id,
        test: 'rob'
    });
  });
})**

//Index.ejs

<!DOCTYPE html>
<html>
  <head>
    <title><%= stationDisplay %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>Enter ICAO code to get the latest METAR</h1>
    <form method="post" action="/">
        <input type="text" name="query">
        <input type="submit">
    </form>
  </body>
</html>

Web サービスを呼び出すモジュール - requestMapping.js

/**
 * @author robertbrock
 */
//Webservice XML
function getMETAR(ICAO){

    var request = require('request');
    request('http://weather.aero/dataserver_current/httpparam?datasource=metars&requestType=retrieve&format=xml&mostRecentForEachStation=constraint&hoursBeforeNow=24&stationString='+ICAO, function(error, response, body){
        if (!error && response.statusCode == 200) {
            var XmlDocument = require('xmldoc').XmlDocument;
            var results = new XmlDocument(body);

            console.log(body)
            console.log(ICAO)
            exports.station_id = results.valueWithPath("data.METAR.station_id");
//etc.

        }
    })
}
exports.getMETAR =getMETAR;
4

2 に答える 2

0

コードの残りの部分を見ないと推測するのは難しいですが、コードは次のようになります。

app.post('/', function(req, res, next) {
  response.getMETAR(req.body.query,function(){
    res.render('results', {
        stationDisplay: response.station_id,
        test: 'rob'
    });
  });
});
于 2013-03-30T22:23:45.907 に答える