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/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();
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM