Angular和Express路由如何在mean.js应用程序中协同工作?

时间:2015-09-11 04:27:32

标签: angularjs node.js express url-routing mean-stack

我正在努力争取Angular和Express Routing(顺便说一句,我对Express表示新手),我一直在使用Angular处理路由 - 使用ui-router - 但现在我和#39; m开始构建MEAN.js应用程序我注意到我可以处理服务器端路由和客户端路由......这就是让我感到困惑的原因,这里有一些我的问题:< / p>

  • 他们有什么不同?
  • 如果我切换到快速路由,我还会有SPA吗?
  • 我可以同时使用两者吗?怎么样?这是好习惯吗?它有什么好处吗?
  • 我应该何时只使用其中一个?
  • 我将如何处理路线参数?
  • 等...

如果有人可以详细解释这些问题,以及人们需要知道的其他额外事情,我会非常感激。

另外,我想知道的是:我只需要在Express中设置服务器内容,还是需要在Node中编码?

3 个答案:

答案 0 :(得分:7)

Express中的路由与角度

中的路由略有不同

快递

  

路由是指对端点(URI)的定义   应用程序以及它如何响应客户端请求。

因此,如果您使用angularjs进行路由,则无需使用express为html模板设置路由。

您只需使用express创建RESTAPI,然后使用angularjs $http$resource

使用这些API

<强>要点:

  • Angular中的路由支持SPA背后的理念。最终,您希望通过Angular处理基于UI的路由更改(即,不需要服务器调用/逻辑)。任何到达后端的路由更改,最终需要服务器逻辑,都应该使用Express路由。

示例

这是创建rest API的快速路由。

app = express();

app.get('/dowork',function(res,req){
    console.log(req.params.msg);
  /... code to do your work .../
});

现在在angularjs调用中工作

$http.get('http://localhost:8080/dowork',{"msg":"hi"}).success(function(data){
 console.log(data);
});

答案 1 :(得分:3)

这里只有两美分。其他专家应该纠正我并进一步解释:

前端路由通常意味着在#之后的URL中进行路由管理。 这是因为浏览器忽略#之后的任何内容。所以这是由角度来利用ajax调用并根据#之后的路径路径获取资源。

在#之前,什么表达句柄是url。这用于从浏览器向服务器发出实际请求。

他们有什么不同:回答

如果我切换到快速路由,我仍然会有SPA:

如果您在前端手动管理网址,同时进行ajax调用以填充您的单个网页,则可以始终拥有SPA。管理前端的网址应该具有可读性。

我可以同时使用两者吗?怎么样? :

每个人都使用两者。 SPA也同时使用。通常基于认证的事物由快速路由处理,而授权和其他基于路由的交互(例如请求资源和其他),前端路由被使用。即使您使用前端路由,对于场景后面的ajax请求,您仍然依赖于express的路由。

这是好的做法吗?它有什么好处吗? :

使用express的路由进行身份验证并提供资源并使用前端的角度路由来保持SPA的运行始终是一种很好的做法。

我应该何时只使用其中一个? :回答

我将如何处理路线参数? :

前端使用路径参数(如果使用ng-route)和后端使用slug,bodyparser等处理参数。 你需要花些时间学习这些。

答案 2 :(得分:1)

我们可以同时使用

当然你可以同时使用两者。根据您的应用程序要求,您的应用程序的哪个部分需要成为spa以获得更好的用户体验,以及您的快速应用程序需要呈现的部分视图。

如果我切换到快速路由,我还会有SPA吗?

如果特定路由不是由角度处理的,并且您希望通过快速应用程序生成视图,则可以执行此操作。如果你想开发一个完整的水疗中心,那么你需要在快递应用程序中开发一个api(http终点)来响应你的角度应用程序的AJAX请求。 Angular routing是所有bout clint side routing,用于生成模板并从服务器获取数据(在您的case case中)并呈现视图。通过所有角度路由调用您的快速路由来获取json数据或任何模板以给出水疗中心的印象

例如

在快递中我们有

app.get("/", function (req, res) {
    res.render("home");
});

您的主页必须包含所有角度脚本文件以初始化角度应用

在clint边码中你可以拥有

var app = angular.module("myApp", ["ui.router"])
    .config(function ($stateProvider, ) {

        $stateProvider.state("home", {
            url: "/"
        })
         .state("manas", {
              url: "/manas",
              templateUrl: "/templates/manas.html"
              // when the state or url is manas its fetch the static  manas.html from server and inject that  to ui view
            })

// i am using angular UI router here

我可以同时使用两者吗?怎么样?这是好习惯吗?它有什么好处吗?

我们可以同时使用两者。这取决于您的应用程序逻辑,它们对使用两者都没有害处或好处。

我应该何时只使用其中一个? 只有在您更关注搜索引擎优化时才使用快速路由。由于SPA不是默认的搜索引擎友好型,因此您需要采取一些额外的操作以使其对搜索引擎友好。

我将如何处理路线参数? 这取决于您使用的角度路由。我的意思是香草角度路由或UI路由。但这两个概念都是一样的

传递参数

通过UI路由传递参数到服务器 https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-parameters

用于UI路由,请点击此链接 https://github.com/angular-ui/ui-router/wiki

如果您的应用程序不是更复杂,您不必关心嵌套视图子视图等 我的建议采用角度平面路由。 毫无疑问,UI路由器提供了更多先进的路由概念,但学习曲线也很陡峭。如果你的应用程序本质上很简单,请使用角度路由