Express框架學習總結


          最近學了Express框架,在學習的過程中,參考了一些資料,感覺Express框架比原生Node.js好用多了。下面我將我學習總結的內容如下:     

          Express中文網     http://www.expressjs.com.cn/

           Express英文網     http://expressjs.com/

         一、Express框架

          Express框架是后台的Node框架,所以和jQuery、zepto、yui、bootstrap都不是一個東西。

          Express在后台的受歡迎的程度,和jQuery一樣,就是企業的事實上的標准。        

       ● 原生Node開發,會發現有很多問題。比如:

         ■ 呈遞靜態頁面很不方便,需要處理每個HTTP請求,還要考慮304問題

         ■ 路由處理代碼不直觀清晰,需要寫很多正則表達式和字符串函數

         ■ 不能集中精力寫業務,要考慮很多其他的東西

安裝Express框架,就是使用npm的命令
1   npm install --save express         

         --save參數,表示自動修改package.json文件,自動添加依賴項。

        路由能力:      

1    var express = require("express");
2    
3    var app = express();
4    
5    app.get("/",function(req,res){
6        res.send("你好");
7    });
8    
9    app.get("/haha",function(req,res){
10        res.send("這是haha頁面,哈哈哈哈哈哈");
11    });
12    
13    app.get(/^\/student\/([\d]{10})$/,function(req,res){
14        res.send("學生信息,學號" + req.params[0]);
15    });
16    
17    app.get("/teacher/:gonghao",function(req,res){
18        res.send("老師信息,工號" + req.params.gonghao);
19    });
20    
21    app.listen(3000);

靜態文件伺服能力: 

1    app.use(express.static("./public"));

模板引擎: 

1    var express = require("express");
2    
3    var app = express();
4    
5    app.set("view engine","ejs");
6    
7    app.get("/",function(req,res){
8        res.render("haha",{
9            "news" : ["我是小新聞啊","我也是啊","哈哈哈哈"]
10        });
11    });
12    
13    app.listen(3000);

       二、路由

         當用get請求訪問一個網址的時候,做什么事情:

1    app.get("網址",function(req,res){
2        
3    });       

        當用post訪問一個網址的時候,做什么事情:

1    app.post("網址",function(req,res){
2        
3    });

       如果想處理這個網址的任何method的請求,那么寫all

1    app.all("/",function(){
2        
3    });

       這里的網址,不分大小寫,也就是說,你路由是

1    app.get("/AAb",function(req,res){
2        res.send("你好");
3    });

        三、中間件

        如果我的的get、post回調函數中,沒有next參數,那么就匹配上第一個路由,就不會往下匹配了。

        如果想往下匹配的話,那么需要寫next() 

1    app.get("/",function(req,res,next){
2        console.log("1");
3        next();
4    });
5    
6    app.get("/",function(req,res){
7        console.log("2");
8    });

       路由get、post這些東西,就是中間件,中間件講究順序,匹配上第一個之后,就不會往后匹配了。next函數才能夠繼續往后匹配。      

       app.use()也是一個中間件。與get、post不同的是,他的網址不是精確匹配的。而是能夠有小文件夾拓展的。

       比如網址:  http://127.0.0.1:3000/admin/aa/bb/cc/dd

1    app.use("/admin",function(req,res){ 
2        res.write(req.originalUrl + "\n");   //    /admin/aa/bb/cc/dd
3        res.write(req.baseUrl + "\n");  //   /admin
4        res.write(req.path + "\n");   //    /aa/bb/cc/dd
5        res.end("你好");
6    });

      ● 大多數情況下,渲染內容用res.render(),將會根據views中的模板文件進行渲染。如果不想使用views文件夾,想自己設置文件夾名字,那么app.set("views","aaaa");

      ● 如果想寫一個快速測試頁,當然可以使用res.send()。這個函數將根據內容,自動幫我們設置了Content-Type頭部和200狀態碼。send()只能用一次,和end一樣。和end不一樣在哪里?能夠自動設置MIME類型。

      ● 如果想使用不同的狀態碼,可以:

              res.status(404).send('Sorry, we cannot find that!');

      ● 如果想使用不同的Content-Type,可以:

              res.set('Content-Type', 'text/html');

        四、GET請求和POST請求的參數    

     ● GET請求的參數在URL中,在原生Node中,需要使用url模塊來識別參數字符串。在Express中,不需要使用url模塊了。可以直接使用req.query對象。

     ● POST請求在express中不能直接獲得,必須使用body-parser模塊。使用后,將可以用req.body得到參數。但是如果表單中含有文件上傳,那么還是需要使用formidable模塊。   

     

     Node中全是回調函數,所以我們自己封裝的函數,里面如果有異步的方法,比如I/O,那么就要用回調函數的方法封裝。

 


免責聲明!

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



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