Falcor - HTTPDataSource 发布 Json

Posted

技术标签:

【中文标题】Falcor - HTTPDataSource 发布 Json【英文标题】:Falcor - HTTPDataSource to post Json 【发布时间】:2018-01-31 22:06:12 【问题描述】:

是否可以使用 falcor.browser 的模型发布 Json 文件?我在其中使用了get方法。以下是我需要的,但它不起作用。

<script src="./js/falcor.browser.js"></script>
function registerUser() 
  var dataSource = new falcor.HttpDataSource("http://localhost/registerUser.json");
  var model = new falcor.Model(
      source: dataSource
  );

var userJson = "name":"John","age":"35","email":"john@abc.com";

model.
 set(userJson).
 then(function(done)
   console.log(done);
 );

这是 server.js 代码:

app.use('/registerUser.json', falcorExpress.dataSourceRoute(function (req, res) 
  return new Router([
    
      route: "rating",
      get: function() 
           // Post call to external Api goes here
      
    
  ]);
));

【问题讨论】:

【参考方案1】:

一些事情:

模型的set() 方法采用1+ pathValues,因此将userJson 对象文字重新格式化为一组路径值。比如:

model.
 set(
    path: ['users', 'id1', 'name'], value: 'John' ,
    path: ['users', 'id1', 'age'], value: 35 ,
    path: ['users', 'id1', 'email'], value: 'john@abc.com' 
 ).
 then(function(done)
   console.log(done);
 );

其次,您的路由器必须实现set handlers 以对应您尝试设置的路径。这些处理程序还应该返回 pathValues:

  new Router([
    
      route: 'users[keys:ids]["name", "age", "email"]',
      set: function(jsonGraph) 
          // jsonGraph looks like  users:  id1:  name: "John", age: 35, email: "john@abc.com" 
          // make request to update name/age/email fields and return updated pathValues, e.g.
          return [
               path: ['users', 'id1', 'name'], value: 'John' ,
               path: ['users', 'id1', 'age'], value: 35 ,
               path: ['users', 'id1', 'email'], value: 'john@abc.com' ,
          ];
      
    
  ]);

鉴于您的数据库请求可能是异步的,您的路由获取处理程序将不得不返回一个承诺或可观察的。但是以上应该可以作为演示。

编辑

如果字段数量变大,您也可以在第三个路径键上使用route pattern matching,如上面在第二个 id 键上演示的那样。

    
      route: 'users[keys:ids][keys:fields]',
      set: function(jsonGraph) 
        /* jsonGraph looks like
           
             users: 
               id1:  field1: "xxx", field2: "yyy", ... ,
               id1:  field1: "xxx", field2: "yyy", ... ,
               ...
            
          
        */
      
    

【讨论】:

我理解你的意思,但这是否意味着如果我有一个大约 10 个字段的表格 - 那么我必须继续扩展路线? Like route: 'users[keys:ids]["name", "age", "email", "address","mobile","phone".....]'?? 是否有任何 Falcor 的工作示例? Falcor (Node/Express) 在哪里使用外部 Api 来获取/发布数据?通常使用 falcorExpress.dataSourceRoute 方法和 request-promise 包。 更新了我的答案以处理大量字段。至于一个工作示例,这是一个带有 get/set/call 处理程序和一个简单的 SQLite db 后端的示例路由器:github.com/jameslaneconkling/falcor-sql-router/blob/master/… 非常感谢,这真的很有帮助。我能够在这里github.com/vasancec/falcorRouting 中成功使用falcor 中的GET、CALL 方法。目前,我在 server.js 文件中使用了“var data”,而不是 API/DB。目前我正在尝试使用 $ref 数据类型,我对此感到震惊。将为此发布一个单独的问题。

以上是关于Falcor - HTTPDataSource 发布 Json的主要内容,如果未能解决你的问题,请参考以下文章

Falcor:如何在 falcor 的 JSON Graph 中定义函数?

Falcor 如何在服务器端缓存数据?

Falcor - 未缓存的深层嵌套引用

无法在 Angular 应用程序中注入 falcor

Falcor:避免过时的客户端缓存

Falcor 查询中的多重嵌套