1. 程式人生 > >express中介軟體和路由

express中介軟體和路由

1.通常http的url是這樣的:http://host[:port][path],http表示協議、host表示主機、port為埠、path指定請求資源的URI,如果URL沒有給出path,一般預設為“/”(通常有客戶端來補上)

2.所謂路由就是如何處理http請求中的路徑部分(path)

例如,我們在express中:

var express = require('express');
var app = express(); 
app.get('/', function (req, res) { 
    res.send('Hello World!');
}); 
app.listen(8000, function () { 
    console.log('Hello World is listening at port 8000');
});

上面的程式碼中app.get()其實就為我們網站添加了一個路由,指定“/”這個路徑由get()的第二個引數代表的函式來處理。

express可以為我們常用的http方法指定路由,使用下面方法:

app.METHOD(path, callback [, callback ...])

3.路由控制代碼

可以為請求處理提供多個回撥函式,其行為類似中介軟體。唯一的區別是這些回撥函式可能呼叫next('router')方法而略過其他路由回撥函式。可以利用該機制為路由定義前提條件,如果在現在路由上繼續執行沒有意義,則可將控制權限交給剩下的路徑

METHOD可以是get或post,如app.get(),app.post()。

其實用express構建伺服器時,很重要的一部分是決定怎麼響應摸個路徑的請求,也即路由請求。最直接的路由配製方法,就是呼叫app.get()、app.post()一條一條的配置。

4.中介軟體

express裡有個中介軟體(middleware)的概念。所謂中介軟體,就是在受到請求後和傳送請求之前這個階段執行的一些函式。

要在一條路由的處理鏈上插入中介軟體,可以使用express物件的use方法:

app.use([path,] function [, function...])

當你為某個路徑安裝了中介軟體,則當以該路徑為基礎的路徑被訪問時,都會應用該中介軟體。中介軟體的函式原型 :

function (req, res, next)

next方法,是為了讓後面的中介軟體繼續處理請求 。

5.router

express還提供一個Router物件,行為很像中介軟體:

var router = express.Router([options]);
// invoked for any requests passed to this router
router.use(function(req, res, next) { 
// .. some logic here .. like any other middleware next();
}); // will handle any request that ends in /events// depends on where the router is "use()'d"
router.get('/events', function(req, res, next) {
 // ..});

定義了router之後也可以將其當作中介軟體傳給app.use():

app.use('/events', router);

6.那到底什麼是路由什麼是middleware?

當我們訪問一個地址時,伺服器要對這個路徑做出響應,採取一定的作用,我們可以把這個過程看作一個路由。訪問的“/”即為router路徑,伺服器採取的動作即為middleware,即一個個特殊的函式。