Falcor 路由器应该 return 来自外部的值 API
Falcor Router should return the value from external API
我是 JavaScript 框架的新手,目前正在尝试设置一个调用外部 api 的 falcor 路由器(现在将其视为一个快速 api 应用程序 + 芒果数据库,托管在 3000 端口)。
现在,我可以使用请求包(注释掉的行)并成功调用 Express Api 应用程序(returns 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、then 语句等。但似乎没有任何效果,显然我在这里遗漏了一些东西 - 不确定是什么。
路由器的 get
处理程序期望 return 值是一个承诺或可解析为 pathValue 的可观察值。要使您对数据库的请求生效,只需 return 解析为路径值的承诺,例如
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 };
});
}
}
]);
我是 JavaScript 框架的新手,目前正在尝试设置一个调用外部 api 的 falcor 路由器(现在将其视为一个快速 api 应用程序 + 芒果数据库,托管在 3000 端口)。
现在,我可以使用请求包(注释掉的行)并成功调用 Express Api 应用程序(returns 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、then 语句等。但似乎没有任何效果,显然我在这里遗漏了一些东西 - 不确定是什么。
路由器的 get
处理程序期望 return 值是一个承诺或可解析为 pathValue 的可观察值。要使您对数据库的请求生效,只需 return 解析为路径值的承诺,例如
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 };
});
}
}
]);