nodejs:Express.js 4.0的route多功能应用

 from:https://blog.gtwang.org/programming/learn-to-use-the-new-router-in-expressjs-4/

參數路由(Route with Parameters)

路由的規則除了使用固定的字串之外,也可以包含會變動參數,下面這個例子可以將使用者的名稱透過 URL 傳入程式中,並且根據使用者的名稱輸出訊息:

// ... (略)

// 含有參數的路由 (http://localhost:8080/hello/:name)
router.get('/hello/:name', function(req, res) {
  res.send('hello ' + req.params.name + '!');
});

// 將路由套用至應用程式
app.use('/', router);

// ... (略)

這裡的 :name 就像一個變數名稱,如果我們輸入的 URL 為http://localhost:8080/hello/seal,那麼在程式中的 req.params.name 所抓取到的值就會是 'seal',透過這樣的機制我們就可以跟不同的使用者打招呼。

express-route-2

 

驗證參數

有時候我們會需要針對傳入的路由參數來進行篩選或驗證,例如檢查使用者所輸入的字串是否是合法的名稱,這時候就可以使用 .param() 這個專門用來處理參數的 middleware:

// ... (略)

// 驗證 :name 的 route middleware
router.param('name', function(req, res, next, name) {

  // 在這裡驗證資料
  // ... ... ...

  // 顯示驗證訊息
  console.log('doing name validations on ' + name);

  // 當驗證成功時,將其儲存至 req
  req.name = name;

  // 繼續後續的處理流程
  next();
});

// 含有參數的路由 (http://localhost:8080/hello/:name)
router.get('/hello/:name', function(req, res) {
  res.send('hello ' + req.name + '!');
});

// 將路由套用至應用程式
app.use('/', router);

// ... (略)

這樣在每次有 :name 參數傳入時,就會先執行這裡新增的 middleware,經過驗證確定沒問題之後,再將傳入的名稱儲存至 req 中,透過這樣的方式將驗證過的資料傳遞給 .get 路由,所以在 .get 路由中,我們也將原本的req.params.name 改為 req.name

現在當我們開啟 http://localhost:8080/hello/seal 的時候,終端機中就會出現驗證的訊息:

express-route-3

登入路由

除了使用 express.Router() 的方式來建立路由之外,我們也可以使用app.route 直接在應用程式上新增路由,這種方式是 Router 的簡略寫法,語法看起來就跟傳統上的 app.get 很類似。

使用 app.route 有個好處是可以讓我們一次針對一個路由新增好幾個動作,例如我們想要使用 GET 顯示登入表單,並且使用 POST 處理表單:

// ... (略)

// ---- ROUTES ----

app.route('/login')

  // 顯示登入表單 (GET http://localhost:8080/login)
  .get(function(req, res) {
    res.send('this is the login form');
  })

  // 處理登入表單 (POST http://localhost:8080/login)
  .post(function(req, res) {
    console.log('processing');
    res.send('processing the login form!');
  });

// ... (略)

這樣一來程式就可以在 /login 這個路由上將 GET 與 POST 分開處理,而且這樣的寫法既方便又簡潔。

posted @ 2017-05-30 11:31  little_ab  阅读(118)  评论(0)    收藏  举报