Falcor - HTTPDataSource 到 post Json
Falcor - HTTPDataSource to post Json
是否可以使用 falcor.browser 的模型 post 一个 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
}
}
]);
}));
一些事情:
模型的 set() method takes 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 以对应您尝试设置的路径。这些处理程序还应该 return 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' },
];
}
}
]);
鉴于您的数据库请求可能是异步的,您的路由获取处理程序将必须 return 承诺或可观察。但以上内容应该可以作为演示。
编辑
如果字段数量变大,您也可以在第三个路径键上使用 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", ... },
...
}
}
*/
}
}
是否可以使用 falcor.browser 的模型 post 一个 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
}
}
]);
}));
一些事情:
模型的 set() method takes 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 以对应您尝试设置的路径。这些处理程序还应该 return 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' },
];
}
}
]);
鉴于您的数据库请求可能是异步的,您的路由获取处理程序将必须 return 承诺或可观察。但以上内容应该可以作为演示。
编辑
如果字段数量变大,您也可以在第三个路径键上使用 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", ... },
...
}
}
*/
}
}