如何在NodeJS中使用Angular ngRoute

时间:2014-08-09 17:30:46

标签: node.js express angular-routing

我试图让AngularJS路由与我的NodeJS http服务器一起工作。我有以下代码:

server.js:

app.set('port', 3000);
app.use(express.static(__dirname));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get('/menuItems', menu.getMenuItems);
httpServer.listen(app.get('port'), function () {
    console.log("Express server listening on port %s.", httpServer.address().port);
});

app.js:

var app = angular.module('app', ['ngRoute']);
app.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
            when('/cases', {
                templateUrl: '../templates/cases.html'
            }).
            otherwise({
                templateUrl: '../index.html'
            });
    }]);

但无论我尝试做什么,我都会得到“无法获取/案件”。

我可以在node.js中设置所有路由,但不愿意。

我做错了什么?

我看过这篇文章:How to use AngularJS routes with Express (Node.js) when a new page is requested?但仍然没有得到它: - (

1 个答案:

答案 0 :(得分:1)

在这种情况下,你有两种选择。

第一个是@majidarif建议的:在URL的哈希中使用你的路由。

但是,在更好的Web应用程序中,非常希望拥有不错的URL。要解决这个问题,您可以在后端使用默认路由(或所有前端路由逐个列出),其处理程序为角度应用程序提供服务,即

function sendIndex(req, res) {
  res.sendfile(indexPath);
}
app.get('/cases', sendIndex);

请记住,这可能会破坏您的相对URL(JS,CSS,图像以及Express提供的所有其他内容),因此您要么使用绝对URL,要么使用后端模板引擎来设置相对URL的基本路径。

然后,在你的角度应用程序中,将为您处理初始路由,至少如果您为$location service设置了html5选项(顺便说一句,这个案例很好)。