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的主要内容,如果未能解决你的问题,请参考以下文章