我试图让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?但仍然没有得到它: - (
答案 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选项(顺便说一句,这个案例很好)。