Falcor 路由器应该从外部 API 返回值

Posted

技术标签:

【中文标题】Falcor 路由器应该从外部 API 返回值【英文标题】:Falcor Router should return the value from external API 【发布时间】:2018-01-27 19:47:48 【问题描述】:

我是 javascript 框架的新手,目前正在尝试设置一个调用外部 api 的 falcor 路由器(现在将其视为 express api 应用程序 + 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 请求调用、承诺、然后声明等。但似乎没有任何效果,显然我在这里遗漏了一些东西 - 不知道是什么。

【问题讨论】:

【参考方案1】:

路由器的get 处理程序期望返回值是一个promise 或一个解析为pathValue 的observable。要使您对 db 的请求生效,只需返回一个解析为 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 ;
         );
      
    
  ]);

【讨论】:

感谢您的建议。我使用了“request-promise”包并使其工作。

以上是关于Falcor 路由器应该从外部 API 返回值的主要内容,如果未能解决你的问题,请参考以下文章

从 falcor 路由器返回数据和参考

在传统 REST API 数据源和 Falcor 客户端之间优化 node.js falcor 路由器

为深度路径构建 falcor 路由器的有效方法?

适当的 Falcor 架构会导致单片路由器吗?

具有来自外部 Api 的缓存数据的 Falcor 模型

Falcor 路由器是不是实施路由排名?