Node 中基于 Koa 框架的 Web 服務搭建實戰

前言

在《Node之Web服務 - 掘金 (juejin.cn)》一文中,我們使用 HTTP 模塊構建了后端接口,從而實現了后端服務的開發。可以對此進行進一步優化

  • http模塊代碼回顧
const http = require("http");const server = http.createServer((req, res) => {if (reqUrl.pathname === "/") {res.writeHead(200, {"Content-Type": "text/html; charset=utf8",});res.end("/");} else if (reqUrl.pathname === "/user") {res.writeHead(200, {"Content-Type": "application/json; charset=utf8",});res.end("/user");} else if (reqUrl.pathname === "/login" && req.method === "POST") {res.end("login success");} else {res.end("errer");}
});server.listen(3000, () => {console.log("server is running at http://127.0.0.1:3000");
});
  1. 引入模塊:

    • const http = require("http");: 引入 Node.js 的 HTTP 模塊,用于創建 HTTP 服務。
  2. 創建 HTTP 服務:

    • const server = http.createServer((req, res) => { ... });: 使用 http.createServer() 方法創建一個 HTTP 服務器,并傳入一個回調函數。
    • 這個回調函數會在每次接收到 HTTP 請求時被調用,reqres 分別代表請求對象和響應對象。
  3. 處理路由:

    • 根路徑 / 的請求:if (reqUrl.pathname === "/") { ... }

      • 設置響應頭的 Content-Type"text/html; charset=utf8"
      • 使用 res.end("/") 返回響應內容 /
    • /user 路徑的請求:else if (reqUrl.pathname === "/user") { ... }

    -   設置響應頭的 `Content-Type` 為 `"application/json; charset=utf8"`。
    -   使用 `res.end("/user")` 返回響應內容 `/user`。
    
    • /login 路徑的 POST 請求:else if (reqUrl.pathname === "/login" && req.method === "POST") { ... }
    -   使用 `res.end("login success")` 返回響應內容 `"login success"`。
    
    • 其他未定義的路徑請求:else { ... }

      • 使用 res.end("error") 返回響應內容 "error"
  4. 啟動服務:

    • server.listen(3000, () => { ... });: 在 3000 端口啟動 HTTP 服務,并在控制臺輸出服務啟動信息。

以上是基礎的使用Node.js 的原生 HTTP 模塊創建了一個簡單的 Web 服務

接下來我們就使用koa框架去搭建一個服務

Koa框架構建服務

這里首先介紹一下什么是koa框架

Koa 是一個新的 web 框架,由 Express 的原班人馬打造,致力于成為 web 應用和 API 開發領域更小、更富有表現力和更健壯的基石

Koa 利用 async 函數丟棄了回調函數,并提供了上下文統一的 API,使得編寫 web 應用變得更加優雅、簡潔和富有表現力

Koa 框架的一些主要特點包括:

  1. 基于 async/await 的異步處理機制:

    • Koa 使用 async/await 語法取代了傳統的回調函數,使得代碼更加簡潔和易讀。
  2. 中間件機制:

    • Koa 采用"洋蔥模型"的中間件機制,中間件按照順序執行,并可以控制請求/響應的流程。
  3. 上下文對象 (Context) :

    • Koa 提供了一個 Context 對象,封裝了 Node.js 原生的 request 和 response 對象,使得開發者可以更方便地訪問和操作請求/響應相關的信息。
  4. 輕量級和可擴展性:

    • Koa 的核心庫非常小,但可以通過第三方中間件進行擴展,滿足各種復雜的業務需求。
  5. 優雅的錯誤處理:

    • Koa 提供了優雅的錯誤處理機制,可以集中處理應用程序中的各種異常。
  6. 路由管理:

    • Koa 沒有內置路由功能,但可以通過第三方路由中間件,如 koa-router,來管理路由。

第一步首先我們需要引入依賴

npm i koa
npm i koa-router

接下來我們要去構建一個路由

這個也就是需要創建的接口

user.js

const router = require('koa-router')()router.get('/user', async (ctx, next) => {ctx.body = {name: 'user',age: 18}
})router.get('/home', async (ctx, next) => {ctx.body = {name: 'home',age: 18}
})module.exports = router

這里創建了兩個接口,分別是/user和/home

然后構建服務,并將路由傳入

app.js

const Koa = require('koa');
const app = new Koa();const userRouter = require('./routers/user');
app.use(userRouter.routes());app.listen(3000, () => {console.log('server is running at http://127.0.0.1:3000');
});

使用 Koa 創建了一個 Web 服務,并將路由定義和處理邏輯封裝在了一個單獨的 user 路由模塊中。在主應用中,通過 app.use(userRouter.routes()) 將路由模塊注冊到了 Koa 應用中。

接下來我們運行app.js服務

image.png

接下來我們就去訪問一下這兩個接口

/user接口

image.png

/home接口

image.png

可見這兩個接口都是訪問成功的,Koa 框架書寫接口更加的優雅

總結

本文講解了如何使用koa框架,使用這個框架來構建后端項目,以及接口的書寫都更加簡潔、清晰和易維護

開發者可以利用 Koa 的這些優勢,構建出簡潔、靈活、可擴展的后端應用程序

相信看到這里的你一定會有所收獲的!!!!趕緊構建一個屬于自己的后端服務吧!!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42974.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python前沿技術:機器學習與人工智能

Python前沿技術:機器學習與人工智能 一、引言 隨著科技的飛速發展,機器學習和人工智能(AI)已經成為了計算機科學領域的熱門話題。Python作為一門易學易用且功能強大的編程語言,已經成為了這兩個領域的首選語言之一。本…

【零基礎】學JS

喝下這碗雞湯 “知識就是力量。” - 弗朗西斯培根 1.三元運算符 目標:能利用三元運算符執行滿足條件的語句 使用場景:其實是比if雙分支更簡單的寫法,可以使用三元表達式 語法:條件 ? 滿足條件的執行代碼 : 不滿足條件執行的代碼 接下來用一個小案例來展…

C#實現求解函數導數和值

using MathNet.Symbolics; using System; using System.IO; using System.Text;private string ConvertToLatex(string mathExpression) {return mathExpression.Replace(" * ", "").Replace("*", ""); }// 將函數定義為字符串 string…

AI語言處理的雙刃劍:Tokens令牌化技術解析

生成式人工智能模型,如GPT-4o,采用基于Transformer架構的復雜處理方式,這與人類處理文本的方式存在明顯差異。這些模型依賴于一種稱為“令牌化”的過程,將文本分解為更小的片段,稱為“令牌”,以便更有效地處…

Kafka拋棄Zookeeper后如何啟動?

Kafaka如何下載 官網地址 目前Kafka最新的版本就是3.7.1 我們可以看到下面這兩個版本信息?什么意思呢? Scala 2.12 - kafka_2.12-3.7.1.tgz (asc, sha512)Scala 2.13 - kafka_2.13-3.7.1.tgz (asc, sha512) 我們應該知道,一個完整的Kafka實…

平安消保在行動 | 守護每一個舒心笑容 不負每一場雙向奔赴

“要時刻記得以消費者為中心,把他們當做自己的朋友,站在他們的角度去思考才能更好地解決問題。” 談及如何成為一名合格的消費者權益維護工作人員,平安養老險深圳分公司負責咨訴工作的龐宏霄認為,除了要具備扎實的專業技能和溝通…

MySQL篇四:表的約束

文章目錄 前言1. 空屬性2. 默認值3. 列描述4. zerofill5. 主鍵6. 自增長7. 唯一鍵8. 外鍵 前言 真正約束字段的是數據類型,但是數據類型約束很單一,需要有一些額外的約束,更好的保證數據的合法性,從業務邏輯角度保證數據的正確性。…

JAVA學習筆記-JAVA基礎語法-DAY24-Stream流、方法引用

第一章 Stream流 說到Stream便容易想到I/O Stream,而實際上,誰規定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所帶來的函數式編程,引入了一個全新的Stream概念,用于解決已有集合類庫既有的弊端。 …

python 高級技巧 0708

python 33個高級用法技巧 使用裝飾器計時函數 裝飾器是一種允許在一個函數或方法調用前后運行額外代碼的結構。 import timedef timer(func):"""裝飾器函數,用于計算函數執行時間并打印。參數:func (function): 被裝飾的函數返回:function: 包裝后…

軟件架構之開發方法

軟件架構之開發方法 第6章:開發方法6.1 軟件生命周期6.2 軟件開發模型6.2.1 瀑布模型6.2.2 演化模型6.2.3 螺旋模型6.2.4 增量模型6.2.5 構件組裝模型 6.3 統一過程6.4 敏捷方法6.4.1 極限編程6.4.2 特征驅動開發6.4.3 Scrum6.4.4 水晶方法6.4.5 其他敏捷方法 6.5 軟…

vmware lun回收引起的IO問題

起初并沒人關注的小問題,正常不過的虛機存儲遷移操作,引起的延遲卻引發一連串的變化。 環境 vsphere 6.7 + 華為集中式存儲 開始 下午5:17 業務反饋,存在數據超時,頻繁在1秒鐘以內,正常在200ms。需運維排查虛機的狀態與IO情況等硬件使用情況。下午5:30 隨手翻開zabbix 打開…

vue在線預覽excel、pdf、word文件

安裝 //docx文檔預覽組件 npm install vue-office/docx vue-demi//excel文檔預覽組件 npm install vue-office/excel vue-demi//pdf文檔預覽組件 npm install vue-office/pdf vue-demi使用示例 docx文檔的預覽 <template><vue-office-docx :src"src" ren…

【嵌入式Linux】<知識點> 虛擬地址空間

前言 在Linux中&#xff0c;新創建的進程都擁有獨立的虛擬地址空間。為深入多進程多線程的理解&#xff0c;了解虛擬地址空間分區十分有必要。 一、概念 虛擬地址空間分為4G空間&#xff0c;其中1G為內核區&#xff0c;3G為用戶區。虛擬地址空間的地址從0開始&#xff0c;且該…

20240708 視覺大模型

參考網站&#xff1a; 萬字長文帶你全面解讀視覺大模型 - 知乎 一.DINO 1."YOLO"&#xff08;You Only Look Once&#xff09;和"DINO"&#xff08;DIstillation of knowledge&#xff09;是兩種不同的模型&#xff0c;針對不同的任務和學習目標。以下是…

oracle數據庫表統計信息

oracle數據庫表統計信息未及時更新會導致oracle基于成本的執行計劃可能不是最優&#xff0c;查看執行計劃是沒問題的&#xff0c;但sql實際執行起來確很慢。 查詢oracle數據庫表統計信息最后更新時間&#xff1a; SELECT TABLE_NAME, LAST_ANALYZED,a.* FROM ALL_TAB_STATISTI…

66.Python-web框架-Django-免費模板django-datta-able的分頁的一種方式

目錄 1.方案介紹 1.1實現效果 1.2django.core.paginator Paginator 類: Page 類: EmptyPage 和 PageNotAnInteger 異常: 1.3 templatetags 2.方案步驟 2.1創建一個common app 2.2創建plugins/_pagination.html 2.3 其他app的views.py查詢方法 2.4在AIRecords.html里…

入門 Vue Router

Vue Router Vue Router插件做了什么&#xff1f; 全局注冊 RouterView 和 RouterLink 組件。添加全局 $router 和 $route 屬性。啟用 useRouter() 和 useRoute() 組合式函數。觸發路由器解析初始路由。 標簽介紹 RouterView 加載指定頁面 <RouterLink to"/home"…

必剪APP視頻剪輯的字幕制作方法教程!

你是否還在用pr聽一句打一句的制作字幕&#xff1f;你是否還在用ps做字幕然后拉到pr里一句一句的對時間軸&#xff1f;快別用那些老方法啦&#xff0c;繁瑣又浪費時間&#xff01;今天給大家推薦一個方便速度的制作字幕的方法&#xff0c;趕快來看看吧&#xff01; 第一步&…

【Altium】AD-網絡版一個用戶非人為異常占用多個License的解決方法

【更多軟件使用問題請點擊億道電子官方網站】 1、 文檔目標 當出現一個用戶同時占用多個授權&#xff0c;又無法單獨釋放一個授權的情況下&#xff0c;該如何解決。 2、 問題場景 一個用戶獲取網絡版授權后&#xff0c;AD會自動重復獲取授權&#xff0c;直到該license下所有授…

電視盒子變身NAS之安裝termux

此方法適合安卓4.4到安卓9.0都可以用&#xff0c;我目前測試的設備是安卓9.0的電視盒子 第一步&#xff1a;下載安裝termux https://termux.dev/en/ 或者 https://github.com/termux/termux-app/releases 第二步&#xff1a;把apk安裝到你的機頂盒&#xff0c;使用優盤&…