Falcor Router应该从外部API返回值

时间:2017-08-19 06:02:59

标签: falcor falcor-router

我是JavaScript框架的新手,目前正在尝试设置一个调用外部api的falcor路由器(现在将其视为一个快速api app + mango db,托管在3000端口)。

现在,我可以使用请求包(注释掉的行)并成功调用Express Api应用程序(返回obj.rating = 4)。但我无法从falcor路由器发送此值而不是硬编码值“5”。

以下是falcor-router的 server.js 代码:

app.use('/rating.json', falcorExpress.dataSourceRoute(function (req, res) {
  return new Router([
    {
      route: "rating",
      get: function() {
        var obj;
        // request('http://localhost:3000/rating/101', function (error, response, body) {
        //   obj = JSON.parse(body);
        //   console.log('rating:', obj.rating); // obj.rating = 4
        // });
        return {path:["rating"], value:"5"};
      }
    }
  ]);
}));

以下是 index.html

的代码
<script>
function showRating() {
  var model = new falcor.Model({source: new falcor.HttpDataSource('http://localhost/rating.json') });
  model.
    get("rating").
    then(function(response) {
      document.getElementById('filmRating').innerText = JSON.stringify(response.json,null, 4);
    });
}
</script>

我还试图查看全局变量声明,同步http请求调用,promises,然后声明等。但似乎没有任何工作,显然我在这里错过了一些东西 - 不确定是什么。

1 个答案:

答案 0 :(得分:0)

路由器的get处理程序期望返回值是一个解析为pathValue的promise或observable。要使您的数据库的请求生效,只需返回一个解析为pathValue的promise,例如

  return new Router([
    {
      route: "rating",
      get: function() {
        return request('http://localhost:3000/rating/101', function (error, response, body) {
           return { path: ["rating", value: JSON.parse(body).rating };
         });
      }
    }
  ]);