角度URL删除#using express to route request

时间:2016-02-05 05:03:10

标签: angularjs node.js express

我试图删除'#'来自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

2 个答案:

答案 0 :(得分:1)

嗯..您只在应用中处理'/'路线。因此,每当您向服务器询问另一条路线'/something'时,服务器都不知道该怎么做。

试试这个(使用router.get()而不是router.all()来处理get请求):

router.get('/*', function(req, res) {
   res.render('home');
});

这应该处理所有路线。

更新

当然,您可能希望快递应用程序处理其他路由,例如您的API。

为此,我建议您使用'/api/foo/{bar}'

格式创建api

您可以通过以下方式设置路由器:

router.route(/^((?!\/(api)).)*$/).get(function(req, res){res.render('home')});

正则表达式适用于所有不以/api开头并返回主页的内容。

请记住,在所有其他路线下面添加此配置以维持层次结构。

总结一下:最后一段代码会处理除以/api开头的所有路由,并且您将API设计为始终以/api开头。使用这种方法,它应该可以正常工作。

答案 1 :(得分:0)

使用superstatic为您的应用程序提供服务。

然后使用我的答案中的选项:Combining AngularJS, HTML5 locations and superstatic