向Handlebars发送REST响应以解析JSON

时间:2016-08-03 17:46:31

标签: rest express handlebars.js

所以我最近跳到基于节点的网络应用程序(我已经玩了很多但现在我实际上在创造一些东西)

所以我使用Express,MongoDB和Node(在Heroku上发布)设置了一个简单的REST API 现在我正在尝试在Express和Node中创建一个客户端/ Web应用程序,它与API通信并解析响应并实际查看对象。

我想要做的是在一个简单的页面上列出API的当前条目。 所以我创建了一条通往' / home'在我的应用程序中工作正常。 它使用了一个工作正常的把手模板。

我使用了一个&home; .js'文件来渲染视图:

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

它返回exporst.index对象/函数而不是正文(我可以在把手中解析:P)

我在这个调用上做了很多变化(在request(options, callback)函数中调用它,在它之外,创建一个options变量和一个单独的回调,如request)但是它们都是错误或返回{ {1}}对象/功能。

当我console.log(body);代替return body;时,它会正确记录。

我猜我现在在圈子里跑。

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

您在调用getItems时引用函数res.render而不是执行函数,获取输出并将其分配给items

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

您需要执行函数getItems以获取实际数据并在视图中呈现它。

对于流控制:您可以将getItems包含在一个promise中,并使用co-expressyield路由处理程序中的promise。