Express框架是后台的Node框架,在后台的受歡迎的程度,和jQuery一樣,就是企業的事實上的標准。
路由
路由是指如何定義應用的端點(URIs)以及如何響應客戶端的請求。
路由是由一個 URI、HTTP 請求(GET、POST等)和若干個句柄組成,它的結構如下:
app.method(path, [callback...], callback) /* app:express 對象的一個實例 method: HTTP 請求方法 path:服務器上的路徑 callback:當路由匹配時要執行的函數 */
一個簡單的路由實例:
var express=require("express"); var app=express(); app.get("/",function (req,res) { res.send("hello world") }); app.listen(3000);
運行結果:
路由方法
//當用get請求訪問一個網址的時候,做什么事情: app.get("網址",function(req,res){ }); //當用post訪問一個網址的時候,做什么事情: app.post("網址",function(req,res){ }); //如果想處理這個網址的任何method的請求,那么寫all app.all("/",function(){ });
注意:
- 這里的網址,不分大小寫
-
所有的GET參數,? 后面的都已經被忽略。 錨點#也被忽略。你路由到/a , 實際/a?id=2&sex=nan 也能被處理。
路由路徑
路由路徑和請求方法一起定義了請求的端點,它可以是字符串、字符串模式或者正則表達式。
// 匹配根路徑的請求 app.get('/', function (req, res) { res.send('root'); }); // 匹配 /about 路徑的請求 app.get('/about', function (req, res) { res.send('about'); }); //匹配student的學號 app.get(/^\/student\/([\d]{10})$/,function(req,res){ res.send("學生信息,學號" + req.params[0]); });
跟正則相比,我們更推薦使用冒號的方式來進行匹配,如下實例:
app.get("/student/:id",function(req,res){ var id = req.params["id"]; var reg= /^[\d]{6}$/; //正則驗證 if(reg.test(id)){ res.send(id); }else{ res.send("請檢查格式"); } });
中間件
Express 是一個自身功能極簡,完全是由路由和中間件構成一個的 web 開發框架:從本質上來說,一個 Express 應用就是在調用各種中間件。
中間件(Middleware) 是一個函數,它可以訪問請求對象(request object (req
)), 響應對象(response object (res
)), 和next
的變量。
路由get、post這些東西,就是中間件,中間件講究順序,匹配上第一個之后,就不會往后匹配了。next函數才能夠繼續往后匹配。如下實例:
app.get("/",function(req,res,next){ console.log("1"); next(); }); app.get("/",function(req,res){ console.log("2"); });
app.use()也是一個中間件。與get、post不同的是,他的網址不是精確匹配的。而是能夠有小文件夾拓展的。
比如網址: http://127.0.0.1:3000/admin/aa/bb/cc/dd
app.use("/admin",function(req,res){ res.write(req.originalUrl + "\n"); // /admin/aa/bb/cc/dd res.write(req.baseUrl + "\n"); // /admin res.write(req.path + "\n"); // /aa/bb/cc/dd res.end("你好"); });
//當你不寫路徑的時候,實際上就相當於"/",就是所有網址
app.use(function(req,res,next){ console.log(new Date()); next(); });