2015-09-11 26 views
8

我一直在为Angular和Express Routing工作挣扎(顺便说一句,我对Express很陌生),我一直在用Angular处理路由 - 用ui-router - 但现在我开始建立一个MEAN .js文件应用程序,我发现我能处理服务器端的路由和客户端路由......而这正是让我感到困惑,这里是我的一些问题:Angular和Express路由在mean.js应用中如何协同工作?

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

如果有人能详细分析这些问题,人们需要知道我会完全感谢其他多余的东西解释。

此外,我想知道的是:我只需要在Express中设置服务器的东西,还是我需要在节点中编码?

+1

简而言之,express会处理url中'#'符号之前的地址路由。 Angular处理'#'符号之后的地址路由 –

回答

6

路由在Express是悦目不同的,那么它是什么 - 在角度

在快递

路由是指端点(URI)来定义一个 应用程序,以及如何响应客户端请求。

所以,如果你正在使用angularjs进行路由,那么你不需要使用express为你的html模板设置路由。

只需在一个方法来创建你的RESTAPI使用快递,然后使用消耗angularjs $http$resource

摘要这些API:

    在角
  • 路由支持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); 
}); 
+0

有意义,请您举个例子,以便更清楚。 –

3

只需两分钱。其他专家应纠正我并进一步解释:

在前端路由通常意味着在#后路由管理URL。 这是因为#之后的任何内容都被浏览器忽略。所以这被角度利用来实现ajax调用,并在#之后取决于路由路径获取资源。

什么表达句柄是#之前的网址。这用于从浏览器到服务器的实际请求。

他们如何不同:回答

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

你总是可以有SPA,如果你在前端侧手动管理网址,同时使AJAX调用填充你的单个页面。在前端管理网址应该具有可读性的意图。

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

每个人都使用两者。 SPA也使用两者。通常基于身份验证的事情是通过快速路由来处理的,而授权和其他基于路由的交互(例如请求资源等)使用前端路由。即使您使用前端路由,对于幕后的ajax请求,您仍然依赖express的路由。

是不是很好的做法?它有什么好处? :

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

什么时候应该只使用其中的一个? :回答

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

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

+0

只是附加信息:使用pushState,替换HTML5中的StateState API,甚至可以省略#。例如:在somedomain.com/a/c中,可以使用这些API在客户端处理/ a/c。 – Harikrishnan

+0

是@Harikrishnan ...感谢您的补充。 – binariedMe

1

我们可以同时使用

的,当然你也可以同时使用。根据您的应用程序需求,您的应用程序需要哪些部分才能获得更好的用户体验,以及哪些部分视图需要通过快速应用程序呈现。

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

如果一个特定的路由不是由角处理,而你想通过快速应用生成一个视图,你可以这样做。如果您想开发一个完整的Spa,那么您需要在您的应用程序中开发api(http端点)以响应您的角度应用程序的AJAX请求。角度路由是所有布林端路由,用于生成模板并从服务器获取数据(在您的情况下表达)并呈现视图。在所有的角路由调用您的明确路由获取JSON数据或任何模板给一个水疗中心的印象

例如

快递

我们

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

你的主页必须包括所有的角脚本文件以初始化角度应用程序

in clint side code you can have

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

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