2015-09-11 56 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路由器提供了更多先進的路由概念,但學習曲線也非常陡峭。如果您的應用程序本質上很簡單,那麼請使用角路由