首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Falcor的setValue()不能在外部模型上工作?

为什么Falcor的setValue()不能在外部模型上工作?
EN

Stack Overflow用户
提问于 2015-08-25 20:33:31
回答 1查看 570关注 0票数 1

在本地setValue()模型上使用法尔科时,它可以正常工作,但是当模型移动到服务器时,就会发生'500 (内部服务器错误)‘。

下面的示例工作正常(脚本在浏览器中运行)

代码语言:javascript
代码运行次数:0
运行
复制
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模型时,它将失败。(脚本在浏览器中运行)

代码语言:javascript
代码运行次数:0
运行
复制
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 );
      });
  });

使用以下节点脚本(脚本运行在服务器上):

代码语言:javascript
代码运行次数:0
运行
复制
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()时):

代码语言:javascript
代码运行次数:0
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 08:47:33

这可能是明示的一个问题。在服务器端:

代码语言:javascript
代码运行次数:0
运行
复制
npm install --save body-parser

代码语言:javascript
代码运行次数:0
运行
复制
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32213532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档