欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Koa2框架快速入門與基本使用方式

 更新時間:2023年03月24日 10:11:45   作者:shangdong2023  
這篇文章主要介紹了Koa2框架快速入門與基本使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

本篇我們講一下 Koa2 框架的基本使用,希望能幫助大家快速上手

Koa2 是什么?簡單來講,它是一個基于 Node.js 的 web server 框架。

官方文檔

Koa2框架使用入門

不使用腳手架,直接使用Koa框架:

# 新建文件夾,控制臺進入文件夾
npm init
npm install koa

然后就可以新建js文件寫Koa代碼了。

帶有詳細注釋的示例代碼如下。

const Koa = require('koa')
const app = new Koa()

// ctx: context, 上下文
app.use((ctx) => {
    ctx.body = 'hello koa!' // ctx.body即為HTTP響應返回的數(shù)據(jù)(即響應體中攜帶的數(shù)據(jù))
})

app.listen(3000) // 監(jiān)聽3000端口


// 瀏覽器地址欄輸入 http://localhost:3000/

使用腳手架koa-generator創(chuàng)建Koa項目:

# 安裝腳手架
npm install koa-generator -g

# 查看是否安裝成功
koa2 --version 
# 或 koa --version

# 在當前路徑下的指定文件夾創(chuàng)建koa項目(如果指定文件夾不存在則會創(chuàng)建)
koa2 <directory name> # 比如 koa2 demo
# 或者 koa <directory name>,如果使用 koa <directory name> 則創(chuàng)建的是koa1的項目
    
# 進入以上指定的文件夾,執(zhí)行 npm install
cd <directory name>
npm install

# 開發(fā)環(huán)境下啟動項目
npm run dev

# 瀏覽器訪問,地址欄輸入如下url(默認端口號3000)
http://localhost:3000/

Koa2入門示例:新建路由、處理HTTP請求。帶有詳細注釋的示例代碼如下。

在routes文件夾下新建文件demo.js如下

// /routes/demo.js

const router = require('koa-router')()

router.prefix('/demo') // 路徑前綴

router.get('/', function (ctx) { // ctx即context,是req(request)和res(response)的集合
    const query = ctx.query // 獲取url中的參數(shù)(以對象的形式表示)
    
    console.log('query: ', query); // query: { xxx: 'xxx', ... }

    ctx.body = 'this is get demo' // 返回數(shù)據(jù)
})

router.post('/', function (ctx) {
    const requestBody = ctx.request.body // 獲取請求體中的數(shù)據(jù)

    console.log('request body: ', requestBody);

    // Koa會根據(jù)返回的數(shù)據(jù)的格式自動設置content-type
    // ctx.body = 'this is post demo' // 自動設置為text/plain
    ctx.body = { errno: 0, message: 'this is post demo' } // 自動設置為application/json
})

module.exports = router

在app.js文件下引入路由并且注冊路由

// /app.js

// 引入路由
const demo = require('./routes/demo')

// 注冊路由
app.use(demo.routes(), demo.allowedMethods())

Postman發(fā)送POST請求

image.png

中間件與洋蔥圈模型

中間件: 是指在整體流程上的一個獨立的業(yè)務模塊,其特點是可擴展、可插拔,就類似于工廠流水線中的一道工序。

使用中間件的意義:

  • 有助于將業(yè)務進行模塊化拆分,讓代碼易寫易讀且便于維護;
  • 統(tǒng)一使用中間件,有助于各業(yè)務代碼的規(guī)范化與標準化;
  • 易添加、易刪除、易擴展。

對于Koa2框架來講:

  • 所有的app.use(...)都是中間件;
  • 中間件的回調(diào)函數(shù)不會在服務啟動后立即執(zhí)行,而是只有當收到網(wǎng)絡請求后才會按照順序執(zhí)行;
  • 路由也是中間件的一種,當收到網(wǎng)絡請求后會根據(jù)請求的methodurl進行匹配,執(zhí)行對應路由的回調(diào)函數(shù)。

Koa2中間件的回調(diào)函數(shù)通常具有如下形式:

async (ctx, next) => {
    // ctx即context,是req(request)和res(response)的集合
    // 執(zhí)行next()即相當于調(diào)用下一個中間件的回調(diào)函數(shù)
    // 為了讓代碼按照預期順序執(zhí)行,通常使用 await next() 的方式進行使用
}

Koa2框架的中間件的執(zhí)行機制,即為洋蔥圈模型:

區(qū)分中間件與洋蔥圈模型: 中間件是Koa2框架中的業(yè)務模塊劃分,洋蔥圈模型是中間件的執(zhí)行機制(執(zhí)行順序)。

洋蔥圈模型演示:

// 洋蔥圈模型示例代碼

const Koa = require('koa')
const app = new Koa()

app.use(async (ctx, next) => {
    console.log('1 start')
    await next()
    console.log('1 end')
})
app.use(async (ctx, next) => {
    console.log('2 start')
    await next()
    console.log('2 end')
})
app.use(async (ctx, next) => {
    console.log('3 start')
    ctx.body = 'hello world'
    console.log('3 end')
})

app.listen(3000)
console.log('server is running')

// 啟動服務時,控制臺打?。?
// server is running
// 瀏覽器訪問 http://localhost:3000/ 后,控制臺打?。?
// 1 start
// 2 start
// 3 start
// 3 end
// 2 end
// 1 end

若某一中間件中不調(diào)用next(),則其后的所有中間件都不會執(zhí)行。

// 某一中間件不調(diào)用next()

const Koa = require('koa')
const app = new Koa()

app.use((ctx, next) => {
    console.log('1 start')
    next()
    console.log('1 end')
})
app.use(async (ctx, next) => {
    console.log('2 start')
    // await next()
    console.log('2 end')
})
app.use(async (ctx, next) => {
    console.log('3 start')
    ctx.body = 'hello world'
    console.log('3 end')
})

app.listen(3000)
console.log('server is running')

// 啟動服務時,控制臺打?。?
// server is running
// 瀏覽器訪問 http://localhost:3000/ 后,控制臺打?。?
// 1 start
// 2 start
// 2 end  
// 1 end  

// 且瀏覽器不會顯示 hello world

中間件回調(diào)函數(shù)使用async定義,且next()前加await的意義在于如果后面的中間件中有異步操作(比如Promise),則能保證代碼按照期望的順序執(zhí)行。

不加async/await示例代碼及運行結果:

// 不加async/await

const Koa = require('koa')
const app = new Koa()

app.use((ctx, next) => {
    console.log('1 start')
    next()
    console.log('1 end')
})

app.use(() => {
    console.log('2 start')
    
    new Promise((resolve, reject) => {
        setTimeout(() => { resolve('hello') }, 0)
    })
    .then((data) => { console.log(data) })
    .then((data) => { console.log(data) })

    console.log('2 end');
})

app.listen(3000)

// 瀏覽器訪問 http://localhost:3000/ 后,控制臺打?。?
// 1 start
// 2 start
// 2 end
// 1 end
// hello
// undefined

async/await示例代碼及運行結果:

const Koa = require('koa')
const app = new Koa()

app.use(async (ctx, next) => {
    console.log('1 start')
    await next()
    console.log('1 end')
})

app.use(async () => {
    console.log('2 start')

    await new Promise((resolve, reject) => {
        setTimeout(() => { resolve('hello') }, 0)
    })
    .then((data) => { console.log(data) })
    .then((data) => { console.log(data) })

    console.log('2 end');
})

app.listen(3000)

// 瀏覽器訪問 http://localhost:3000/ 后,控制臺打?。?
// 1 start
// 2 start
// hello
// undefined
// 2 end
// 1 end

總結

至此,Koa2的入門使用就介紹完了~

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 簡述pm2常用命令集合及配置文件說明

    簡述pm2常用命令集合及配置文件說明

    這篇文章主要介紹了簡述pm2常用命令集合及配置文件說明,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 詳解如何用typescript開發(fā)koa2的二三事

    詳解如何用typescript開發(fā)koa2的二三事

    這篇文章主要介紹了詳解如何用typescript開發(fā)koa2的二三事,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • React+react-dropzone+node.js實現(xiàn)圖片上傳的示例代碼

    React+react-dropzone+node.js實現(xiàn)圖片上傳的示例代碼

    本篇文章主要介紹了React+react-dropzone+node.js實現(xiàn)圖片上傳的示例代碼,非常具有實用價值,需要的朋友可以參考下
    2017-08-08
  • nodejs切換版本使用最新教程(不需要卸載重裝)

    nodejs切換版本使用最新教程(不需要卸載重裝)

    有時候需要運行不同的項目,node版本不一致會導致不少問題,特別是最新版本對應的一些插件,由于語法等原因?qū)е虏灰欢嫒莸桶姹?這樣運行低版本環(huán)境的項目的時候很多坑,這篇文章主要給大家介紹了關于nodejs切換版本使用(不需要卸載重裝)的相關資料,需要的朋友可以參考下
    2022-11-11
  • node中的session的具體使用

    node中的session的具體使用

    這篇文章主要介紹了node中的session的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • nodejs安裝與卸載圖文教程(高版本降為低版本)

    nodejs安裝與卸載圖文教程(高版本降為低版本)

    我們往往用命令行安裝的nodejs不是最新版本,而且升級nodejs并不是件非常簡單的事情,這篇文章主要給大家介紹了關于nodejs安裝與卸載(高版本降為低版本)的相關資料,需要的朋友可以參考下
    2023-12-12
  • 詳解nodejs微信公眾號開發(fā)——6.自定義菜單

    詳解nodejs微信公眾號開發(fā)——6.自定義菜單

    這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——6.自定義菜單,自定義菜單能夠幫助公眾號豐富界面,讓用戶更好更快地理解公眾號的功能。
    2017-04-04
  • 利用Decorator如何控制Koa路由詳解

    利用Decorator如何控制Koa路由詳解

    最近學習了plover的底層框架koa,所以下面這篇文章主要給大家介紹了關于利用Decorator如何控制Koa路由的相關資料,,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來隨著小編一起學習學習吧
    2018-06-06
  • package.json文件配置詳解

    package.json文件配置詳解

    這篇文章主要介紹了package.json文件配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-06-06
  • Node.js?中常用內(nèi)置模塊(path?路徑模塊)

    Node.js?中常用內(nèi)置模塊(path?路徑模塊)

    這篇文章主要介紹了Node.js?中常用內(nèi)置模塊(path?路徑模塊),文章圍繞主題展開詳細的相關介紹,具有一定的參考價值,感興趣的朋友可以參考一下
    2022-09-09

最新評論