我试图删除'#'来自angular-urls,我已经在我的前端进行了调整,如
$locationProvider.html5Mode(true);
<base href="/*"> in my view file.
我在后端使用快递。虽然它工作得很好但是当我刷新页面时它会给我找不到错误网址。
我的默认网址就像从快递到渲染视图一样,
//server.js
app.use(express.static('app'));
var routes = require('./routes/index');
app.use('/', routes);
/routes/index
router.all('/', function(req, res) {
res.render('home');
});
如果我先点击http://localhost:1337/
,它就有效。它很好地适应了这个http://localhost:1337/first-param
但是当我直接点击http://localhost:1337/first-param
而没有找到基本网址时,它会给我找不到错误。
请不要给我.htaccess
的提示。我不想使用.htaccess
。
答案 0 :(得分:1)
嗯..您只在应用中处理'/'
路线。因此,每当您向服务器询问另一条路线'/something'
时,服务器都不知道该怎么做。
试试这个(使用router.get()而不是router.all()来处理get请求):
router.get('/*', function(req, res) {
res.render('home');
});
这应该处理所有路线。
更新
当然,您可能希望快递应用程序处理其他路由,例如您的API。
为此,我建议您使用'/api/foo/{bar}'
您可以通过以下方式设置路由器:
router.route(/^((?!\/(api)).)*$/).get(function(req, res){res.render('home')});
正则表达式适用于所有不以/api
开头并返回主页的内容。
请记住,在所有其他路线下面添加此配置以维持层次结构。
总结一下:最后一段代码会处理除以/api
开头的所有路由,并且您将API设计为始终以/api
开头。使用这种方法,它应该可以正常工作。
答案 1 :(得分:0)
使用superstatic为您的应用程序提供服务。
然后使用我的答案中的选项:Combining AngularJS, HTML5 locations and superstatic