2016-03-09 3 views
1

У меня есть несколько микросервисов Netflix OSS (Eureka, Falcor sidecar), а также очень простая настройка Falcor, чтобы проверить функциональность. Я пытаюсь позвонить с клиентской стороны Falcor в внешний API, конечной точкой которого является http://localhost:8001/customer/customers. В моем index.js файле у меня есть:Не удалось получить маршрутизатор falcor для сравнения данных с помощью внешнего API через sidecar.

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"}}] 

Я не слишком заинтересован в этом этапе именно в том, какой формат объекта я верну, я просто хочу, чтобы с чем играть. Как изменить мой маршрутизатор, чтобы получить данные, которые я ожидаю?

Благодаря

ответ

0

Вы должны попробовать это ...

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" 
     } 
    } 
}