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,即一個個特殊的函式。