中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Koa2框架快速入門與基本使用的方法是什么

發布時間:2023-03-25 14:38:34 來源:億速云 閱讀:101 作者:iii 欄目:開發技術

本篇內容介紹了“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響應返回的數據(即響應體中攜帶的數據)
})

app.listen(3000) // 監聽3000端口


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

使用腳手架koa-generator創建Koa項目:

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

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

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

# 開發環境下啟動項目
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中的參數(以對象的形式表示)
    
    console.log('query: ', query); // query: { xxx: 'xxx', ... }

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

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

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

    // Koa會根據返回的數據的格式自動設置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發送POST請求

Koa2框架快速入門與基本使用的方法是什么

中間件與洋蔥圈模型

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

Koa2框架快速入門與基本使用的方法是什么

使用中間件的意義:

  • 有助于將業務進行模塊化拆分,讓代碼易寫易讀且便于維護;

  • 統一使用中間件,有助于各業務代碼的規范化與標準化;

  • 易添加、易刪除、易擴展。

對于Koa2框架來講:

  • 所有的app.use(...)都是中間件;

  • 中間件的回調函數不會在服務啟動后立即執行,而是只有當收到網絡請求后才會按照順序執行;

  • 路由也是中間件的一種,當收到網絡請求后會根據請求的methodurl進行匹配,執行對應路由的回調函數。

Koa2框架快速入門與基本使用的方法是什么

Koa2中間件的回調函數通常具有如下形式:

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

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

Koa2框架快速入門與基本使用的方法是什么

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

洋蔥圈模型演示:

// 洋蔥圈模型示例代碼

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

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

// 某一中間件不調用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

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

不加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框架快速入門與基本使用的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌云县| 桃园市| 三门县| 浦北县| 南充市| 嘉峪关市| 凌云县| 博白县| 晋中市| 屏东县| 枣阳市| 柳林县| 平果县| 红河县| 唐山市| 泗洪县| 青州市| 西华县| 尉犁县| 普陀区| 余江县| 凯里市| 绥江县| 岳池县| 黄龙县| 靖州| 六枝特区| 永和县| 大埔区| 平安县| 丹寨县| 奉化市| 太原市| 兴文县| 盘山县| 类乌齐县| 铜鼓县| 河西区| 云南省| 丹阳市| 伊宁县|