2015-08-25 1 views
1

При использовании setValue() на локальной модели Falcor он работает как ожидалось, но когда модель перемещается на сервер, появляется «500 (Internal Server Error)».Почему функция setValue() Falcor не работает на внешней модели?

В приведенном ниже примере работает должным образом (скрипт запускается в браузере)

var $ref = falcor.Model.ref; 
var model = new falcor.Model({ 
    cache: { 
     productsById: { 
      1: { 
       name: "Product ABC", 
       otherAdd: "something 1" 
      }, 
      2: { 
       name: "Product 123", 
       otherAdd: "something 2" 
      }, 

     }, 
     _view: [ $ref('productsById[1]') ], 
     _cart: [] 
    } 
}); 

model. 
    getValue("_view[0].name"). 
    then(function(response1) { 
    console.log(response1); 
    model. 
     setValue("_view[0].name", "Another book"). 
     subscribe(function(response2){ 
     console.log(response2); 
     }); 
    }); 

Но при изменении данной настройки на удаленную модель Falcor он терпит неудачу. (Скрипт запускается в браузере)

var $ref = falcor.Model.ref; 
var model = new falcor.Model({source: new falcor.HttpDataSource('/model.json') }); 

model. 
    getValue("_view[0].name"). // <-- works fine 
    then(function(response1) { 
    console.log(response1); 
    model. 
     setValue("_view[0].name", "Another book"). // <-- fails 
     subscribe(function(response2){ // <-- fails on both subscribe() and then() 
     console.log(response2); 
     }); 
    }); 

С следующим сценарием узла (скрипт выполняется на сервере): сообщение

var express = require('express'); 
var app = express(); 
var falcor = require('falcor'); 
var falcorExpress = require('falcor-express'); 
var $ref = falcor.Model.ref; 

function example(){ 
    return { 
     cache: { 
      productsById: { 
       1: { 
        name: "Product ABC", 
        otherAdd: "something 1" 
       }, 
       2: { 
        name: "Product 123", 
        otherAdd: "something 2" 
       }, 

      }, 
      _view: [ $ref('productsById[1]') ], 
      _cart: [] 
     } 
    } 
} 

app.use('/model.json', falcorExpress.dataSourceRoute(function (req, res) { 
    return new falcor. 
        Model(example()). 
        asDataSource(); 
})); 

app.use(express.static(__dirname + '/')); 
var server = app.listen(8080); 

Ошибки в консоли (когда setValue() называется):

POST http://localhost:8080/model.json 500 (Internal Server Error) 
requestObserver @ falcor.browser.js:9294145.Observable.create.o.subscribe @ falcor.browser.js:9186_subscribe @ falcor.browser.js:2830182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256182.TapObservable.subscribeCore @ falcor.browser.js:16424tryCatcher @ falcor.browser.js:12847setDisposable @ falcor.browser.js:14304subscribe @ falcor.browser.js:14318182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256182.observableProto.materialize @ falcor.browser.js:16605tryCatcher @ falcor.browser.js:12847setDisposable @ falcor.browser.js:17513s @ falcor.browser.js:17530182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256182.MapObservable.subscribeCore @ falcor.browser.js:17073tryCatcher @ falcor.browser.js:12847setDisposable @ falcor.browser.js:14304subscribe @ falcor.browser.js:14318182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256182.MergeAllObservable.subscribeCore @ falcor.browser.js:15858tryCatcher @ falcor.browser.js:12847setDisposable @ falcor.browser.js:14304subscribe @ falcor.browser.js:14318182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256(anonymous function) @ falcor.browser.js:15419182.Rx.AnonymousObserver.AnonymousObserver.error @ falcor.browser.js:14066182.Rx.internals.AbstractObserver.AbstractObserver.onError @ falcor.browser.js:14000subscribeToSetResponse @ falcor.browser.js:4133182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256(anonymous function) @ falcor.browser.js:15409tryCatcher @ falcor.browser.js:12847setDisposable @ falcor.browser.js:17513s @ falcor.browser.js:17530182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:1425661.SetResponse.invokeSourceRequest @ falcor.browser.js:4031182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256182.observableProto.finally.observableProto.ensure @ falcor.browser.js:16522tryCatcher @ falcor.browser.js:12847setDisposable @ falcor.browser.js:17513182.ScheduledItem.invokeCore @ falcor.browser.js:13209182.ScheduledItem.invoke @ falcor.browser.js:13197runTrampoline @ falcor.browser.js:13517tryCatcher @ falcor.browser.js:12847scheduleNow @ falcor.browser.js:13528182.Rx.Scheduler.schedulerProto.scheduleWithState @ falcor.browser.js:13250s @ falcor.browser.js:17528182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:1425658.IdempotentResponse.ensureCollect @ falcor.browser.js:3696182.Rx.Observable.observableProto.subscribe.observableProto.forEach @ falcor.browser.js:14256subscribeToResponse @ falcor.browser.js:3956subscribe @ falcor.browser.js:3903(anonymous function) @ test.html:34 
test.html:35 Error: Response code 500 
    at _handleXhrError (http://netflix.github.io/falcor/build/falcor.browser.js:9316:19) 
    at onXhrLoad (http://netflix.github.io/falcor/build/falcor.browser.js:9366:14) 
    at XMLHttpRequest.onreadystatechange (http://netflix.github.io/falcor/build/falcor.browser.js:9280:13) 

ответ

4

Вероятно, это проблема с экспрессом. На стороне сервера:

npm install --save body-parser 

и

var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({extended: true})); 
+0

Это был именно вопрос, который я бегала в. Если экспресс-сервер, на котором запущен falcor, возвращает 500, убедитесь, что используется body-parser. –