【问题标题】:Grunt connect server returns cannot GET /route with backboneGrunt 连接服务器返回无法使用主干获取 / 路由
【发布时间】:2014-02-06 04:22:34
【问题描述】:
我有一个在 localhost 上运行的连接服务器,在我的骨干应用程序中,如果我重新加载路由,比如 localhost:8000/fun,服务器显然会返回 Cannot GET /fun,因为 /fun 不存在。
服务器需要知道以某种方式提供 index.html/fun 或其他东西。我实际上尝试过,但我得到了一些其他错误。有没有人处理过这个问题?
TL;DR 无法获取 /fun
【问题讨论】:
标签:
javascript
backbone.js
gruntjs
grunt-contrib-connect
【解决方案1】:
So the basic solution was found here.
你想要 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;
}
}
}
}
【解决方案2】:
已接受的答案不再起作用 (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;
}
否则效果很好!帮了我很多!