經過前面九天的學習,對Node.js開發有了一個初步的認識,今天繼續學習Node.js后端開發框架Express相關內容,僅供學習分享使用,如有不足之處,還請指正,
回應物件(res)
1. 什么是回應物件?
回應物件(res)是指服務器端向客戶端回應資料的物件,包含了所有要回應的內容,Express的回應物件是對Node.js原始回應物件的封裝,
2. 回應物件常見方法
回應物件的常見方法,如下所示:
- res.send(data)方法,用于向客戶端回傳任意型別的資料,但是不能直接回傳數字,否則會被當成狀態碼,如果一定要回傳,則需要加引號,
- res.json()方法,向客戶端回傳json資料,且會設定回傳的Header為的application/json,
- res.render()方法,渲染模板,用于將資料填充到模塊中,
- res.redirect()方法,實作服務端跳轉,
- res.cookie(),設定cookie,
- res.set(),設定回應頭
3. res.send方法
回傳Json格式的資料,如下所示:
1 router.get('/', function(req, res, next) { 2 var data=https://www.cnblogs.com/hsiang/archive/2022/04/21/{"name":"小六公子","age":29}; 3 res.send(data); 4 });
在瀏覽器中打開如下所示:

如果要單獨回傳一個數字,需要加引號,轉換成字串,否則會被當成狀態碼,如下所示:
1 router.get('/', function(req, res, next) { 2 //res.send(10);//錯誤 3 res.send("10");//正確 4 });
回傳錯誤示例,截圖如下所示:

注意:res.send方法,在一個請求內,是能生效一次,如果連續寫多個,則會丟失且報錯,如下所示:
1 router.get('/', function(req, res, next) { 2 res.send("123"); 3 res.send("456");//此內容不會輸出,且后臺會報錯 4 });
在瀏覽器打開及后臺錯誤,如下所示:
針對這種需要需要發送多次資料的情況,可以先將資料進行拼接組裝,再統一發送,
4. res.json方法
Express提供了專門的回傳json資料的方法,在回傳回應資料時,同時設定回應頭,如下所示:
1 router.get('/', function(req, res, next) { 2 var data=https://www.cnblogs.com/hsiang/archive/2022/04/21/{"name":"小六公子","age":29}; 3 res.json(data); 4 });
在瀏覽器中打開如下所示:

5. res.render方法
用戶讀取模板,并渲染資料到模板中,然后再發送到客戶端,如下所示:
index.ejs模塊檔案如下所示:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title><%= title %></title> 5 <link rel='stylesheet' href='/stylesheets/style.css' /> 6 </head> 7 <body> 8 <h1><%= title %></h1> 9 <p>Welcome to <%= title %></p> 10 <p>I am <%= name %></p> 11 </body> 12 </html>
渲染如下所示:
1 router.get('/', function(req, res, next) { 2 res.render('index', { title: 'Express' ,name:"小六公子"}); 3 });
在瀏覽器中運行,如下所示:

6. res.redirect方法
此方法可以實作頁面的后端直接跳轉,且沒有任何提示,如下所示:
1 router.get('/', function(req, res, next) { 2 res.redirect("https://www.baidu.com");//跳轉 3 });
注意:頁面跳轉后,瀏覽器中的網址也會變成跳轉后的新網址,
7. 鏈式呼叫
回應物件的方法可以鏈式呼叫,如下所示:
1 router.get('/', function(req, res, next) {
2 res.status(200).send("小六呀");//先設定狀態碼,再輸出內容
3 });
請求物件(req)
請求物件包含了一次請求中的所有資料(如:請求頭,請求體等),
1. 獲取GET方式引數
在Express中,獲取GET方式傳遞的引數非常簡便,如下所示:
1 router.get('/', function(req, res, next) { 2 //請求格式:req.query.引數名 3 var name = req.query.name; 4 var age = req.query.age; 5 res.send("姓名:"+name+",年齡:"+age); 6 });
在命令列中運行程式,并在瀏覽器中打開,如下所示:

2. 獲取POST方式引數
POST方式通過【req.body.引數名】 的方式進行獲取,POST方式一般采用form表單的方式實作,
創建一個靜態網頁login.html,如下所示:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>登錄</title> 6 </head> 7 <body> 8 <form method="post" action="/login.html"> 9 姓名:<input type="text" name="name" /> <br /> 10 年齡:<input type="text" name="age" /> <br /> 11 <input type="submit" value="登錄" /> 12 </form> 13 </body> 14 </html>
在路由檔案中,獲取引數,并進行回傳,如下所示:
1 router.post('/login.html',function(req,res,next){ 2 var name = req.body.name; 3 var age = req.body.age; 4 res.send("【POST方式】姓名:"+name+",年齡:"+age); 5 });
在瀏覽器中打開,如下所示:

注意:第一次打開form表單是GET方式,第二次回應是POST方式,所以在路由中設定的POST方式回應頁面,在控制臺視窗日志如下所示:

3. 引數匹配模式
地址欄中的引數還可以通過引數匹配的方式進行獲取,匹配地址通過【冒號引數名】的方式,然后通過【req.params.引數名】進行獲取,如下所示:
1 router.get('/list/:id/:name', function(req, res, next) { 2 var id = req.params.id; 3 var name = req.params.name; 4 res.send("傳遞的引數為id:"+id+",name:"+name); 5 });
然后在瀏覽器打開,如下所示:

中間件
Express是一個自身功能極簡,完全是由路由和中間件構成的一個web開發框架,從本質上來說,一個Express的應用就是在呼叫各種中間件,
在Node.js中,中間件本質是一個函式,它可以訪問請求物件,回應物件和next尾函式,如果當前中間件沒有終結請求-回應回圈,則必須呼叫next方法將控制權交給下一個中間件,否則請求會掛起,
如404時,呼叫創建錯誤方法,如下所示:
1 app.use(function(req, res, next) { 2 next(createError(404)); 3 });
備注
走馬川行奉送出師西征 / 走馬川行奉送封大夫出師西征
【作者】岑參 【朝代】唐君不見走馬川行雪海邊,平沙莽莽黃入天,
輪臺九月風夜吼,一川碎石大如斗,隨風滿地石亂走,
匈奴草黃馬正肥,金山西見煙塵飛,漢家大將西出師,
將軍金甲夜不脫,半夜軍行戈相撥,風頭如刀面如割,
馬毛帶雪汗氣蒸,五花連錢旋作冰,幕中草檄硯水凝,
虜騎聞之應膽懾,料知短兵不敢接,車師西門佇獻捷,
作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文著作權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段宣告,且在文章頁面明顯位置給出原文連接,謝謝,
關注個人公眾號,定時同步更新技術及職場文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/460864.html
標籤:其他
