【问题标题】:Grunt connect + modRewriteGrunt 连接 + modRewrite
【发布时间】:2014-01-22 00:24:17
【问题描述】:

这个问题很容易解释。我目前有两个版本的连接任务,一个与 grunt-contrib-proxy 一起使用,另一个与 modRewrite 一起使用。但我需要同时使用两者。

这样,如果加载了某些“路由”选择: ['/login', '/ord'] 我需要代理请求,但如果加载了其他任何内容,我需要重定向到 /index .html。原因是我使用的是backbone.js,所以localhost:8000/fun 应该是在主干中加载有趣的路由。

以下所有连接任务都运行良好(单独)。

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
      )

非常感谢。

【问题讨论】:

  • 听起来您希望代理中间件路由具有优先权。因此,只需先将它们推送到中间件堆栈上,然后再添加其他的。

标签: javascript node.js grunt-contrib-connect


【解决方案1】:

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
      }
    ]

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2014-09-28
    • 2023-03-12
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多