2014-01-22 49 views
0

这个问题很容易解释。我目前有两个版本的连接任务,一个使用grunt-contrib-proxy,另一个使用modRewrite。但我需要使用两者。这样,如果加载了某些“路由”选择:['/ login','/ ord']我需要代理请求,但是如果其他任何东西被加载,我需要重定向到/ index.html的。原因是,我使用的是backbone.js,所以localhost:8000/fun应该在主干中加载有趣的路由。Grunt connect + modRewrite

以下所有连接任务都可以正常工作(单独使用)。

TL; DR我如何组合这些连接任务:

connect: { 
    server: { 
    options: { 
     port: 9001, 
     middleware: function(connect, options) { 
     var middlewares, proxy; 
     proxy = require('grunt-connect-proxy/lib/utils').proxyRequest; 
     middlewares = [proxy, connect["static"](options.base), connect.directory(options.base)]; 
     return middlewares; 
     } 
    }, 
    proxies: [ 
     { 
     context: ['/login', '/ord'], 
     host: '10.10.1.13', 
     https: false 
     } 
    ] 
    } 
} 

connect: { 
    server: { 
    options: { 
     port: 9001, 
     open: true, 
     base: ['./'], 
     middleware: function(connect, options) { 
     var middlewares; 
     middlewares = []; 
     middlewares.push(modRewrite(['^[^\\.]*$ /index.html [L]'])); 
     options.base.forEach(function(base) { 
      return middlewares.push(connect["static"](base)); 
     }); 
     return middlewares; 
     } 
    } 
    } 
} 

在这里,他们是在咖啡如果你喜欢:

connect: 
    server: 
    options: 
     port: 9001 
     # keepalive: true 
     middleware: (connect, options) -> 
     proxy = require('grunt-connect-proxy/lib/utils').proxyRequest 
     middlewares = [ 
      proxy 
      connect.static(options.base) 
      connect.directory(options.base) 
     ] 
     middlewares 
    proxies: [ 
     { 
     context: ['/login', '/ord'] 
     host: '10.10.1.13' 
     https: false 
     } 
    ] 

connect: 
    server: 
    options: 
     port: 9001 
     open: true 
     base: ['./'] 
     middleware: (connect, options) -> (
     middlewares = [] 
     middlewares.push(modRewrite(['^[^\\.]*$ /index.html [L]'])) 
     options.base.forEach((base) -> 
      middlewares.push(connect.static(base)) 
     ) 
     middlewares 
    ) 

感谢bagillion。

+1

这听起来像你希望代理中间件路由具有优先权。所以只需将它们推入中间件堆栈,然后添加其他。 – bpaul

回答

2

This article was helpful in solving my issues.

咖啡溶液:

connect: 
    server: 
    options: 
     port: 9001 
     base: './' 
     # keepalive: true 
     uselessMiddleware: (req, res, next) -> 
     next() 
     middleware: (connect, options) -> 
     # same as in grunt-contrib-connect 

     directory = options.directory || options.base[options.base.length - 1] 
     if (!Array.isArray(options.base)) 
      options.base = [options.base] 

     # custom middleware 
     proxy = require('grunt-connect-proxy/lib/utils').proxyRequest 
     middlewares = [ 
      # proxy 
      proxy 
      connect.static(options.base[0]) 
      connect.directory(options.base[0]) 
      # mod rewrite 
      modRewrite(['^[^\\.]*$ /index.html [L]']) 
      connect.static(options.base[0]) 
     ] 

     # same as in grunt-contrib-connect 
     options.base.forEach((base) -> 
      middlewares.push(connect.static(base)) 
     ) 
     middlewares.push(connect.directory(directory)) 
     middlewares 

    proxies: [ 
     { 
     context: ['/login', '/UserData', '/logout'] 
     host: '10.10.1.13' 
     https: false 
     } 
    ] 
相关问题