角度和节点路由

时间:2014-12-04 12:34:45

标签: angularjs node.js express routing

我正在使用Node作为后端Angular的前端,但如果为前端和后端声明相同的路由会发生什么。我还没有尝试过。

例如:如果我正在构建一个TODO应用程序,并且我有/ todos后端服务,并且我使用angular渲染todos视图使用相同的路径。

3 个答案:

答案 0 :(得分:3)

AngularJS默认处理#之后的路线。如果你不改变它,那么什么都不会发生。

否则,将调用后端路由。

答案 1 :(得分:1)

Angular是客户端浏览器框架。您的应用默认为斜杠(/),它指向您的index.html。您的路由前缀为 hash(#),这会阻止浏览器向服务器发出请求。

Angular默认为客户端&使用自己的路由机制。 Express提供服务器端RESTful路由,其行为类似于角度应用程序的REST Api。

如果你想从默认的角度路由机制中使用HTML5 Pushstate API(删除 hash(/)),唯一能区分角度路由和express / server路由的东西,你只需要如下所示构建您的应用程序。

  express()
        .use('/api', backend) // backend is express app
        .use('/', www) // www is public/static files
        .all('/*', function (req, res, next) {
            "use strict";
            // Just send the index.html for other files to support HTML5Mode
            res.sendfile('./app/index.html', {root: __dirname});
        })
        .listen(process.env.PORT || 8888, function () {
            debug('Express dev server listening on port ');
        });

您的快速/服务器路线位于 / api 部分之后,其他路线(显然是您的角度路线)将返回 index.html(html快照)

上述机制最适合MEAN网络应用。

答案 2 :(得分:0)

Angular在#like myhost.io/angular /#/ someroute 之后提供自己的路由,而节点提供像 myhost.io/some/other/route 那样的普通路线几乎不可能失败!

注意:

您必须小心设置路线,因为如果您有静态文件(例如 angular 客户端),那么使用快递或具有相同路径的路线将无效连接。