nodeJS入門04-Express路由和中間件
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/ddres.write(req.baseUrl + "\n"); // /adminres.write(req.path + "\n"); // /aa/bb/cc/ddres.end("你好");
});
//當你不寫路徑的時候,實際上就相當于"/",就是所有網址
app.use(function(req,res,next){console.log(new Date());next();
});