2016-07-19 8 views
0

私はMEANスタックを学習しようとしていますが、node.jsにあるjavascriptでいくつかの問題が発生しました。 function(err、response、body)のような関数が私にその値を未定義として与えている、私のmodule.exports.homelist関数に問題がありました。私はしばらくの間、答えを探していて、非同期コードとコールバック関数を見つけましたが、私の状況に合った解決策を見つけることができませんでした。 Node.js:REST呼び出しと要求関数が未定義の値を返します

コード:

var request = require('request'); 
var apiOptions = { 
    server : "https://localhost:3000" 
}; 
if (process.env.NODE_ENV === 'production') { 
    apiOptions.server = "https://getting-mean-loc8r.herokuapp.com"; 
} 

var renderHomepage = function (req, res, responseBody) { 
    var message; 
    if (!(responseBody instanceof Array)) { 
     message = "API lookup error"; 
     responseBody = []; 
    } else { 
     if (!responseBody.length) { 
      message = "No places found nearby"; 
     } 
    } 
    res.render('locations-list', { 
     title: 'Loc8r - find a place to work with wifi', 
     pageHeader: { 
      title: 'Loc8r', 
      strapline: 'Find places to work with wifi near you!' 
     }, 
     sidebar: "Looking for wifi and a seat? Loc8r helps you find places to work when out and about. Perhaps with coffee, cake or a pint? Let Loc8r help you find the place you're looking for.", 
     locations: responseBody, 
     message: message 
    }); 
} 

/* GET 'home' page */ 
module.exports.homelist = function(req, res) { 
    var requestOptions, path; 
    path = '/api/locations'; 
    requestOptions = { 
     url : apiOptions.server + path, 
     method : "GET", 
     json : {}, 
     qs : { 
      lng : -0.7992599, 
      lat : 51.378091, 
      maxDistance : 20 
     } 
    }; 
    request(
     requestOptions, 
     function(err, response, body) { 
      var i, data; 
      data = body; 
      if (data !== undefined && response !== undefined && response.statusCode === 200 && data.length) { 
       for (i=0; i<data.length; i++) { 
        data[i].distance = _formatDistance(data[i].distance); 
       } 
      } 
      renderHomepage(req, res, data); 
     } 
    ); 

    var _formatDistance = function (distance) { 
     var numDistance, unit; 
     if (distance > 1) { 
      numDistance = parseFloat(distance).toFixed(1); 
      unit = 'km'; 
     } else { 
      numDistance = parseInt(distance * 1000,10); 
      unit = 'm'; 
     } 
     return numDistance + unit; 
    } 
}; 

EDIT:

var express = require('express'); var router = express.Router(); 
var ctrlLocations = require('../controllers/locations'); 
router.get('/', ctrlLocations.homelist); 
module.exports = router; 
+0

このモジュールはどのようにロードされ、呼び出されますか? '.homeList(...)'がどのように呼び出されているのか、呼び出されたときにコールバックで何をしているのかを確認する必要があります。 – jfriend00

+0

ああ申し訳ありませんが、私は同じ問題を抱えている人のためにスタックオーバーフローで見たことから何かをテストしていましたが、もちろんリクエスト関数内でコールバックを行うのは悪い考えです。私はSimon Holmesの "Meaning Getting"という本を使ってこのプロジェクトを行います。このプロジェクトでは、上記のファイルを必要とする別のファイルがあり、次にhomelist関数を使用するためにrouter.get関数を使用しています。 –

+0

これは上記のファイルを使用するためのコードです: var express = require( 'express'); var router = express.Router(); var ctrlLocations = require( '../ controllers/locations'); router.get( '/'、ctrlLocations.homelist); module.exports = router; –

答えて

0

あなたが言及あなたがMEAN stack-をしている:これは、HTMLのホームページをレンダリングするために私のhomelist機能を使用して、私は別のファイルを持っているコードです。表現が必要ですか?エクスプレスウェブサイトの文書をお読みください。

+0

そうです。私は、必要なすべてのパッケージを必要とすることを世話する他のファイルを持っています。私はちょうど私がこの特定のファイルに私のコーディングの問題を絞り込むことができたので、残りのファイルを読む人々の時間を無駄にしたくなかった。 –

関連する問題