Falcor 路由特定中间件

Posted

技术标签:

【中文标题】Falcor 路由特定中间件【英文标题】:Falcor route specific middleware 【发布时间】:2015-11-13 08:32:55 【问题描述】:

给定在服务器上运行的以下路由器类:

var PetsRouterBase = Router.createClass([
  route: 'petList[integers:indices].name',
  get: function(pathSet) 

    return [
       
        path: ['petList', 0, 'name'], 
        value: 'Pets I have now'
      ,
       
        path: ['petList', 1, 'name'], 
        value: 'Pets I once had'
      ,
       
        path: ['petList', 2, 'name'], 
        value: 'Pets my friends have'
      
    ];
  
]);

以及浏览器中的如下路径查询(我使用的是falcor-http-datasource):

model.get('petList[0..2].name');

我得到了正确的数据:


  "jsonGraph": 
    "petList":  
      "0":"name":"Shows of Artists I've been to before",
      "1":"name":"Shows of artists my friends have been to before",
      "2":"name":"Highly rated artists"
    
  

我的问题是,在服务器上,我是否有一种方法可以访问 falcor 响应此获取路由请求通过线路发送回浏览器的实际结果?

我的用例是我想同时注销两条数据:

    路由通过的 pathSet。 falcor 通过网络发回的 json 结果。

我在想它可能看起来像这样:

var PetsRouterBase = Router.createClass([
  route: 'petList[integers:indices].name',
  done: function(pathSet, results) 
    // Log out the result of the lookup
    console.log(pathSet, results); 
  ,
  get: function(pathSet) 

    return [
       
        path: ['petList', 0, 'name'], 
        value: 'Pets I have now'
      ,
       
        path: ['petList', 1, 'name'], 
        value: 'Pets I once had'
      ,
       
        path: ['petList', 2, 'name'], 
        value: 'Pets my friends have'
      
    ];
  
]);

只是为了清楚。我知道我可以在客户端获得结果,但我想将它们通过管道传输到服务器上的其他地方。

【问题讨论】:

【参考方案1】:

目前最简单的事情是在将路由器发送到快速中间件之前装饰路由器。

app.use('/model.json', FalcorServer.dataSourceRoute(function(req, res) 
    return 
        get: function(pathSets) 
            // print incoming paths to console
            console.log(JSON.stringify(pathSets, null, 4));
            return router.
                get(pathSets).
                // print the results to the console
                    doAction(function(output) 
                        console.log(JSON.stringify(output, null, 4));    
                    );
        
    ;
)

【讨论】:

完美!我使用了这种方法,并且效果很好。我确实必须为他们的方法签名添加 set 和 call with wrappers。

以上是关于Falcor 路由特定中间件的主要内容,如果未能解决你的问题,请参考以下文章

从 falcor 路由器返回数据和参考

php Auth中间件到特定路由

在特定的路由范围cakephp中调用中间件3

laravel 5.2 中特定路由的 web 中间件

如何在中间件中将 bodyParser 上传限制设置为特定路由而不是全局?

在 Laravel 5 中,如何禁用特定路由的 VerifycsrfToken 中间件?