Возникли проблемы при получении маршрутизатора Falcor для ссылки на данные с помощью внешнего API через коляску
Я настроил несколько микросервисов Netflix OSS (Eureka, Falcor sidecar), а также базовую настройку Falcor для проверки функциональности. Я пытаюсь позвонить со стороны клиента Falcor внешнему API, конечная точка которого http://localhost:8001/customer/customers
, В моем index.js
файл у меня есть:
app.use('/model.json', falcorExpress.dataSourceRoute(function (req, res) {
return new falcorRouter([
{
route: "customers.length",
get: function (pathset) {
return http.get("http://localhost:8001/customer/customers")
.then(function (json) {
return {
path: pathset,
value: $atom(json.length)
};
});
}
}
]);
}));
Тогда на моей стороне клиента index.html
:
<html>
<head>
<script src="js/falcor.browser.js"></script>
<script>
var model = new falcor.Model({source: new falcor.HttpDataSource('/model.json') });
model.
get("customers.length").
then(function(response) {
console.log(response);
});
</script>
</head>
<body>
</body>
</html>
Если я ударил http://localhost:8001/customer/customers
API вручную, я возвращаю объект JSON, как это:
[
{
"customerId": 1,
"customerName": "Pierre"
},
{
"customerId": 2,
"customerName": "Paula"
}
]
Тем не менее, мой console.log
выводит объект ошибки следующим образом:
[{path: ["customers","length"],
value: {message: "undefined is not a function"}}]
На данном этапе меня не слишком интересует, какой именно объект формата я получаю, я просто хочу что-нибудь поиграть. Как изменить мой маршрутизатор, чтобы получить ожидаемые данные?
Спасибо
1 ответ
Вы должны попробовать это...
SERVER
// index.js
var falcorExpress = require('falcor-express');
var Router = require('falcor-router');
var express = require('express');
var app = express();
var fs = require("fs");
var q = require("q");
app.use('/model.json', falcorExpress.dataSourceRoute(function(req, res) {
var jdata;
function getJson() {
var defer = q.defer();
fs.readFile(__dirname + "/" + "abc.json", 'utf8', function(err, data) {
// console.log(data);
if (err) {
defer.reject(err);
} else {
jdata = JSON.parse(data);
defer.res
defer.resolve(jdata);
}
});
return defer.promise;
}
return new Router([
{
// match a request for the key "falcor.greeting"
route: "falcor.greeting",
get: function() {
return { path: ["falcor", "greeting"], value: "hello" };
}
},
{
// match a request for the key "fa.greeting"
route: 'fa.greeting',
get: function() {
return getJson().then(function(data) {
console.log(data.fa.greeting);
return { path: ["fa", "greeting"], value: data.fa.greeting };
}, function(error) {
console.log(error);
return error;
});
}
},
{
// match a request for the key "sa.ga"
route: 'sa.ga',
get: function() {
return getJson().then(function(data) {
console.log(data.sa.ga);
return { path: ["sa", "ga"], value: data.sa.ga };
}, function(error) {
console.log(error);
return error;
});
}
}
]);
}));
// serve static files from current directory
app.use(express.static(__dirname + '/'));
var server = app.listen(8008, function(err) {
if (err) {
console.error(err);
return;
}
console.log("navigate to http://localhost:8008");
});
КЛИЕНТ
<!-- index.html -->
<html>
<head>
<!-- Do _not_ rely on this URL in production. Use only during development. -->
<script src="//netflix.github.io/falcor/build/falcor.browser.js"></script>
<script>
var model = new falcor.Model({
source: new falcor.HttpDataSource('/model.json')
});
//logging:
var log = console.log.bind(console);
var jlog = function(x) {
console.log(JSON.stringify(x, null, 3));
};
var jerror = function(x) {
console.error(JSON.stringify(x, null, 3));
};
model.get("falcor.greeting").then(jlog, jerror)
model.get("fa.greeting").then(jlog, jerror)
model.get("sa.ga").then(jlog, jerror)
</script>
</head>
<body>
</body>
</html>
JSON FILE
{
"fa": {
"greeting": "Hello World"
},
"sa": {
"ga": "ha"
}
}
ВЫХОД НА КОНСОЛЬ БРАУЗЕРА
{
"json": {
"falcor": {
"greeting": "hello"
}
}
}
(index):15 {
"json": {
"fa": {
"greeting": "Hello World"
}
}
}
(index):15 {
"json": {
"sa": {
"ga": "ha"
}
}
}