9

我有一个在本地主机上运行的连接服务器,在我的主干应用程序中,如果我重新加载路由,比如 localhost:8000/fun,服务器显然会返回 Cannot GET /fun,因为 /fun 不存在。

不知何故,服务器需要知道为 index.html/fun 提供服务。我实际上尝试过,但我得到了一些其他错误。以前有没有人处理过这个问题?

TL;DR无法获取 /fun

4

2 回答 2

9

所以在这里找到了基本的解决方案。

你想要modRewrite:

npm install connect-modrewrite --save-dev

在你的 Gruntfile 中:

modRewrite = require('connect-modrewrite')

咖啡:

connect:
  server:
    options:
      port: 8765
      open: true
      base: ['./']
      middleware: (connect, options) ->
        middlewares = []

        middlewares.push(modRewrite(['^[^\\.]*$ /index.html [L]']))
        options.base.forEach( (base) ->
          middlewares.push(connect.static(base))
        )
        middlewares

香草JS:

connect: {
  server: {
    options: {
      port: 8765,
      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;
      }
    }
  }
}
于 2014-01-17T00:56:40.093 回答
4

接受的答案不再起作用(2015-10-20),因为连接项目结构发生了变化,并且 connect.static 被移到了自己的包“serve-static”中。因此,您必须通过以下方式调整此答案:

npm install serve-static --save-dev

在你的 Gruntfile.js 中需要它

var serveStatic = require('serve-static');

然后将中间件代码更改为以下内容:

middleware: function(connect, options) {
      var middlewares;
      middlewares = [];
      middlewares.push( modRewrite( ['^[^\\.]*$ /index.html [L]'] ) );
      options.base.forEach( function( base ) {
        return middlewares.push( serveStatic( base ) );
      });
      return middlewares;
    }

否则效果很好!帮了我很多!

于 2015-10-20T11:10:39.920 回答