2016-04-04 15 views
0

私はNodeとJavascriptを一般的に使い慣れています。 WebサービスからJSON応答を取得するためにリクエストモジュールを使用しています。要求を関数に変換するか、別の関数の中に要求を埋め込むのが最善かどうかはわかりません。いずれにせよ運がなかった。Node.js request in function

// Module imports 
var express = require('express'); 
var router = express.Router(); 
var request = require('request'); 

var options = { 
    url: 'https:www.example.com/wow.json', 
    auth: { 
    user: 'user', 
    password: 'pass', 
    json: true 
    } 
} 

request(options, function (err, res, body) { 
    if (err) { 
    console.log(err); 
    return; 
    } 
    requestResult = JSON.parse(body); // All data 
    wowUsage = requestResult.publishers[0].used; 
}); 

// Sending data to the template view 
router.get('/', function(req, res, next) { 
    res.render('template', {tempVar: wowUsage}); 
}); 

module.exports = router; 

私のWebサーバーを起動するたびに、このコードは1回実行された後に終了します。ページを更新しても新しい情報は読み込まれません。要求を関数に埋め込み、その関数をrouter.getステートメントで呼び出す必要がありますか?私は機能の要求を入れ子にしようとしましたが、私はその作業を全くできませんでした。

答えて

1

リクエストを別の関数に入れる場合は、適切なデータで呼び出されるコールバックパラメータを新しい関数に追加してください。例:

function getJSON(callback) { 
    request(options, function(err, res, body) { 
    if (err) 
     return callback(err); 
    try { 
     callback(null, JSON.parse(body).publishers[0].used); 
    } catch (ex) { 
     callback(ex); 
    } 
    }); 
} 

router.get('/', function(req, res, next) { 
    getJSON(function(err, wowUsage) { 
    if (err) { 
     console.log(err.stack); 
     return res.status(500); 
    } 
    res.render('template', {tempVar: wowUsage}); 
    }); 
}); 
+0

ありがとうmscdex。それがトリックでした。 – knoll