2014-01-22 47 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 
     } 
    ] 
相關問題