2016-08-03 16 views
0

ので、私は最近ので送信REST応答が

(私はたくさんたくさんで遊んでてきたが、今、私は実際に何かを作成しています)ベースのWebアプリケーションをノードAにジャンプを取ってきたJSONをパースしますExpress、MongoDB、Node(Herokuで公開)を使用して簡単なREST APIを設定しました ExpressとNodeでAPIと通信し、応答を解析して実際にクライアント/ Webアプリケーションを作成しようとしていますオブジェクト。

私がしたいのは、APIの現在のエントリを単純なページにリストすることです。 私は '/ home'へのルートを作成しました。 それはあまりにもうまく動作するハンドルバーテンプレートを使用します。

私はそうのようなビューをレンダリングするために「home.js」ファイルを使用し

var request = require('request'); 
exports.index = function (req, res) { 
    res.render('home', { 
     title: 'home' 
    }); 
}; 

私はここに別のものを試してみたが、私はのような何かやるたび:

var request = require('request'); 

exports.index = function (req, res) { 
    res.render('home', { 
     title: 'home', 
     items: getItems 
    }); 
}; 

var getItems = function(req, res, next) { 
    request(process.env.API_URL, function(err, resp, body) { 
     if (!err && resp.statusCode == 200) { 
      return body; 
     } 
    } 
}; 

をそれを返しますボディの代わりにrequestオブジェクト/関数(ハンドルバーで解析することができます:P)

私はこの呼び出しで多くのバリエーションを行いました(exporst.index fそれ以外の場合は、オプション変数と別のコールバック(request(options, callback)のように)を作成しますが、それらはすべてエラーか、requestオブジェクト/関数を返します。

return body;の代わりにconsole.log(body);を実行すると正しくログに記録されます。

私は今、サークルで動いています。任意のヘルプ:)

答えて

0

res.renderを呼び出す代わりに、関数を実行、出力を取得し、itemsに割り当てるときは、機能getItemsを参照しているため

感謝します。

res.render('home', { 
     title: 'home', 
     items: getItems // this is just a reference to "getItems" function. 
    }); 

あなたは、実際のデータを取得し、ビューでそれをレンダリングする機能getItemsを実行する必要があります。

フロー制御の場合:約束してgetItemsをラップし、co-expressyieldをルートハンドラの約束で使用できます。

+0

これは意味があります。私は 'var getItems = request(porcess.env.API_URL、function(err、resp、body){return body;});'のようなものを実行すると同じ結果を得ました。私は変数を呼び出すときに関数を実行しないのですか?答えは、私が変数を指しているにすぎないが、これはうまくいかないはずだからだ。 – Shuyinsama

+0

あなたは非同期HTTPリクエストを作成していますが、それをvarに割り当てると動作しません。あなたは、コールバック上のデータを取得するか、またはその要求を約束で包んで、ルートハンドラに渡す必要があります。 –

+0

ありがとうございました。それは今よりも男性の感覚です! – Shuyinsama

関連する問題