Grunt连接服务器返回“无法获取/路由”的错误,使用Backbone。

9

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

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

TL;DR:无法获取/fun。

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

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

否则它的表现很好!对我帮助很大!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接