Node.js基礎入門第十天

来源:https://www.cnblogs.com/hsiang/archive/2022/04/21/16172176.html
-Advertisement-
Play Games

經過前面九天的學習,對Node.js開發有了一個初步的認識,今天繼續學習Node.js後端開發框架Express相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...


經過前面九天的學習,對Node.js開發有了一個初步的認識,今天繼續學習Node.js後端開發框架Express相關內容,僅供學習分享使用,如有不足之處,還請指正。

響應對象(res)

1. 什麼是響應對象?

響應對象(res)是指伺服器端向客戶端響應數據的對象,包含了所有要響應的內容。Express的響應對象是對Node.js原始響應對象的封裝。

2. 響應對象常見方法

響應對象的常見方法,如下所示:

  1. res.send(data)方法,用於向客戶端返回任意類型的數據。但是不能直接返回數字,否則會被當成狀態碼,如果一定要返回,則需要加引號。
  2. res.json()方法,向客戶端返回json數據,且會設置返回的Header為的application/json。
  3. res.render()方法,渲染模板,用於將數據填充到模塊中。
  4. res.redirect()方法,實現服務端跳轉。
  5. res.cookie(),設置cookie。
  6. res.set(),設置響應頭

3. res.send方法

返回Json格式的數據,如下所示:

1 router.get('/', function(req, res, next) {
2     var data={"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={"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/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 導讀: 本次分享的大綱—— Perception Introduction Sensor Setup & Sensor Fusion Perception Onboard System Perception Technical Challenges -- 01 Perception Introduc ...
  • 1、約束 1.1、唯一性約束(unique) 唯一性約束修飾的欄位具有唯一性,不能重覆。但可以為NULL。 案例:給某一列添加unique drop table if exists t_user; create table t_user( id int, username varchar(255) ...
  • 4 月 23 日,首期 OpenHarmony 開源與開發者成長計劃分享日正式啟動! ...
  • 前言 手機等智能設備是現代生活中的重要角色,我們會在這些智能設備上做登錄賬戶,設置偏好,拍攝照片,保存聯繫人等日常操作。這些數據耗費了我們很多時間和精力,對我們而言極為重要。 如果我們的設備換代了或者重新安裝了某個應用,之前使用的數據如果能自動保留,那將是非常出色的用戶體驗。而保留數據的第一步則在於 ...
  • Hello HarmonyOS系列課程目前一共推出了5節課程,分別由趙桐、Brove、李博浩、Fred、帥哲等多位華為資深軟體開發工程師主講。 ...
  • OpenHarmony技術日 即將揭幕! 4月25日(星期一)09:00-18:00 與你驚喜相約! ...
  • 前言 ​ 隨著科技以及業務的發展,手勢的應用也越來越普及,因此對於數據採集,我們要考慮如果通過全埋點來實現手勢的採集。 一、手勢識別器 ​ 蘋果為了降低開發者在手勢事件處理方面的開發難度,定義了一個抽象類 UIGestureRecognizer 來協助開發者。UIGestureRecognizer ...
  • 支持轉化事件回傳至華為應用市場商業推廣,便捷歸因,實時調優; 卸載分析新增卸載前路徑分析,深度剖析卸載根因。 查看詳情 新增關鍵幀能力,通過關鍵幀點可實現圖片、文字等位置移動、旋轉等動態效果,比如文字的彈幕效果; 新增文字氣泡和花字,快速添加實現不同風格的文字樣式。 查看詳情 新增UI自定義菜單和設 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...