【问题标题】:How to use Angular ngRoute with NodeJS如何在 NodeJS 中使用 Angular ngRoute
【发布时间】:2014-10-02 23:31:46
【问题描述】:

我试图让 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'
            });
    }]);

但无论我尝试做什么,我都会得到“Cannot GET /cases”。

我可以在 node.js 中设置我的所有路由,但我不想这样做。

我做错了什么?

我看过这个帖子:How to use AngularJS routes with Express (Node.js) when a new page is requested? 但还是不明白:-(

【问题讨论】:

  • 在您的前端,网址应该是#/cases。然后它应该通过向后端请求/cases 路由来填充。所以从技术上讲,你有 2 条路线。所以试试吧,localhost/#/cases
  • 你是对的!谢谢你。那么我想做的事情不可行吗?我只需要使用 url 中的井号标签吗?
  • 好吧,你必须阅读为什么会这样。但这就是它的工作原理,因为您在网络服务器的/ 上提供Angular。角度或任何前端框架的路由都是这样工作的。使用# 将使用前端框架路由,而没有它将使用后端框架路由。

标签: node.js express angular-routing


【解决方案1】:

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

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

但是,在更好的 Web 应用程序中,非常希望有漂亮的 URL。为了解决这个问题,您可以在后端有一个默认路由(或所有前端路由一一列出),其处理程序为 Angular 应用程序提供服务,即

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

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

然后,在您的 Angular 应用程序中,将为您处理初始路线,至少如果您已为 $location service 设置了 html5 选项(顺便说一句,此案例值得阅读)。

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 2016-07-04
    • 2018-06-13
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多