国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

node中間件-koa框架

這篇具有很好參考價(jià)值的文章主要介紹了node中間件-koa框架。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. koa 基本使用

  • 安裝 npm i koa
  • koa導(dǎo)出的是一個(gè)類,必須用new關(guān)鍵字進(jìn)行創(chuàng)建
  • koa也是通過注冊(cè)中間件來完成請(qǐng)求操作的
const koa = require('koa');
//  導(dǎo)出的類,必須用new關(guān)鍵字
const app = new koa()
app.listen(8000, () => {
	console.log('koa 服務(wù)器啟動(dòng)~')
})

//  使用koa這里傳遞兩個(gè)參數(shù) cxt 與next
app.use((cxt, next) => {
	console.log('匹配中間')
	cxt.body = '使用cxt中的body返回?cái)?shù)據(jù)'
})

2. 參數(shù)解析

  • koa注冊(cè)的中間件提供了兩個(gè)參數(shù):
  • ctx:上下文(Context)對(duì)象;
    • koa并沒有像express一樣,將req和res分開,而是將它們作為ctx的屬性;
    • ctx代表一次請(qǐng)求的上下文對(duì)象;
    • ctx.request:獲取請(qǐng)求對(duì)象;
    • ctx.response:獲取響應(yīng)對(duì)象;
  • next:本質(zhì)上是一個(gè)dispatch,類似于之前的next;

注意點(diǎn)

  1. cxt 上下文有個(gè)請(qǐng)求對(duì)象一個(gè)是request既koa本身的對(duì)象,還有一個(gè)node 封裝的請(qǐng)求對(duì)象:req
  2. 兩個(gè)響應(yīng)對(duì)象:cxt.response 是koa封裝的響應(yīng)式對(duì)象 ,txt.res 是node封裝的響應(yīng)式對(duì)象
app.use((cxt, next) => {
	 /**  注意點(diǎn) 兩個(gè)請(qǐng)求對(duì)象
	 * @description:  cxt 上下文有兩個(gè)請(qǐng)求對(duì)象一個(gè)是request既koa本身的對(duì)象,還有一個(gè)node封裝的請(qǐng)求對(duì)象:req
	 * @param {type} 
	 */
	cxt.request   // 
  cxt.req
	/** 響應(yīng)對(duì)象 兩個(gè)響應(yīng)對(duì)象
	* @description:  cxt.response 是koa封裝的響應(yīng)式對(duì)象
	* @param {type} txt.res 是node封裝的響應(yīng)式對(duì)象
	* @return: 
	*/
	cxt.body = '使用cxt中的body返回?cái)?shù)據(jù)'
})

3. 請(qǐng)求路徑區(qū)分

  • koa通過創(chuàng)建的app對(duì)象,注冊(cè)中間件只能通過use方法:
    • Koa并沒有提供methods的方式來注冊(cè)中間件;
    • 也沒有提供path中間件來匹配路徑;
  • 但是在開發(fā)中我們?nèi)绾螌⒙窂胶蚼ethod分離呢?
    • 方式一:根據(jù)request自己來判斷;
    • 方式二:使用第三方路由中間件;
// path
// app.use((cxt, next) => {
// 	if (cxt.path === '/users') {
// 	} else if (cxt.path === '/login') {
// 		cxt.body = '登錄成功'
// 	} else { }
// })

// method 
app.use((cxt, next) => {
	if (cxt.method === 'POST') {
		cxt.body = '登錄成功'
	} else { }
})

4. 路由

  • 安裝 npm install @koa/router
const koa = require('koa');
const router = require('@koa/router')


const app = new koa()
// 1. 安裝路由使用  npm i @koa/router

const userRouter = new router({ prefix: '/users' })
//2. 注冊(cè)路由中間件
userRouter.get('/', (cxt, next) => {
	cxt.body = '路由使用'
})

userRouter.get('/:id', (cxt, next) => {
	const id = cxt.params.id
	console.log(id);
	cxt.body=id
})

// 3. 路由生效  
app.use(userRouter.routes())
// allowedMethods路徑或者方法匹配配置
app.use(userRouter.allowedMethods())
app.listen(8000, () => {
	console.log('koa 服務(wù)器啟動(dòng)~')
})

注意allowedMethods用于判斷某一個(gè)method是否支持:某個(gè)請(qǐng)求或者路徑是否正確

5 參數(shù)解析

  1. get params方式 例子:/:id
  2. get query方式 例子: ?name=admin&age=18
  3. post json方式 例子 {name:"admin" pass:123456}
  4. post x-www-form-urlencoded
  5. post form-data
  • 注意點(diǎn) 下面路由統(tǒng)一注冊(cè)為users
const userRouter = new router({ prefix: '/users' })

5.1 params 與query解析

  • params參數(shù) cxt.params.id
  • query參數(shù) cxt.query
 userRouter.get('/:id', (cxt, next) => {
 	const id = cxt.params.id
 	cxt.body = id
 })
 userRouter.get('/', (cxt, next) => {
 	const query = cxt.query
 	cxt.body = query
 })

5.2 body參數(shù)與urlencoded 解析

  • 安裝依賴: npm install koa-bodyparser;
  • 使用與注冊(cè) koa-bodyparser的中間件; app.use(bodyparser())
// 3. post/json  body參數(shù)
// 安裝庫  npm install koa - bodyparser
// app.use(bodyparser())
// userRouter.post('/', (cxt, next) => {
// 	 const body= cxt.request.body
// 	 cxt.body=body
// })

// 4. urlencoded
app.use(bodyparser())
userRouter.post('/', (cxt, next) => {
	const body = cxt.request.body
	cxt.body = body
})

5.3 form-data參數(shù)

  • 解析body中的數(shù)據(jù),需要使用multer
  • 安裝依賴:npm install --save @koa/multer multer
const upload =multer({})
app.use(upload.any())
app.use((cxt,next)=>{
	console.log(cxt.req.body);
})

6 . 文件上傳

具體配置參考文章來源地址http://www.zghlxwxcb.cn/news/detail-603747.html

const koa = require('koa');
const router = require('@koa/router')

const multer = require('@koa/multer')
const app = new koa()

app.listen(8000, () => {
	console.log('koa 服務(wù)器啟動(dòng)~')
})

const userRouter = new router({ prefix: '/users' })
/**
 * 5. post form-data 
*/
let storage = multer.diskStorage({
	destination: (req, file, cb) => {
		cb(null, './uploads/')
	},
	filename: (ctx, file, cb) => {
		cb(null, file.originalname);
	}
});

const upload = multer({
	storage
})

userRouter.post('/', upload.single('file'), (cxt, next) => {

})
// 5. form-data 解析  需要使用multer
app.use(userRouter.routes())

7. 靜態(tài)服務(wù)器

  • koa并沒有內(nèi)置部署相關(guān)的功能,所以需要使用第三方庫:
  • 安裝依賴 npm install koa-static
const static=require("koa-static")
const app = new koa()
app.use(static('./upload'))

8 響應(yīng)數(shù)據(jù)

  • 響應(yīng)結(jié)果:body將響應(yīng)主體設(shè)置為以下之一:
    • string :字符串?dāng)?shù)據(jù)
    • Buffer :Buffer數(shù)據(jù)
    • Stream :流數(shù)據(jù)
    • Object|| Array:對(duì)象或者數(shù)組
    • null :不輸出任何內(nèi)容
    • 如果response.status尚未設(shè)置,Koa會(huì)自動(dòng)將狀態(tài)設(shè)置為200或204。
const userRouter = new router({ prefix: '/users' })
userRouter.post('/', (cxt, next) => {
	// 1.buffer 響應(yīng)數(shù)據(jù)
	// cxt.body=Buffer.from('hello node')
	//  2. 文件流
	// const readerStream = fs.createReadStream('./upload/th5TYWK266.jpg')
	// cxt.type = 'image/jpeg'   // 請(qǐng)求展示圖片
	// cxt.body = readerStream
	// 3.響應(yīng)數(shù)組或者對(duì)象類型
    cxt.body={
			name:'admin',
			password:123456
		}
})

9 錯(cuò)誤處理

  • 在做錯(cuò)誤處理統(tǒng)一封裝時(shí):cxt上下文可以觸發(fā)一個(gè)emit事件
  • 因此可以使用app.on進(jìn)行監(jiān)聽事件
const koa = require('koa');
const router = require('@koa/router')
const app = new koa()
app.listen(8000, () => {
	console.log('koa 服務(wù)器啟動(dòng)~')
})
const userRouter = new router({ prefix: '/users' })

userRouter.get('/', (cxt, next) => {
	const isAuth = false
	if (isAuth) {
		cxt.body = '登錄成功,返回token'
	} else {
		// cxt.body = {
		// 	code: 1001,
		// 	message: '沒有進(jìn)行授權(quán)'
		// }
		// 統(tǒng)一處理錯(cuò)誤
		cxt.app.emit('errorEvent', 1001,cxt)
	}
})


app.on('errorEvent', (code,cxt) => {
	let message = ''
	switch (code) {
		case 1001:
			message = '沒有授權(quán)'
			break
		default: 1002
			message = '成功'
	}
	const body = {
		code,
		message
	}
	cxt.body=body
})
app.use(userRouter.routes())

到了這里,關(guān)于node中間件-koa框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Node.js從基礎(chǔ)到高級(jí)運(yùn)用】十三、NodeJS中間件高級(jí)應(yīng)用

    【Node.js從基礎(chǔ)到高級(jí)運(yùn)用】十三、NodeJS中間件高級(jí)應(yīng)用

    在現(xiàn)代web開發(fā)中,Node.js因其高效和靈活性而備受青睞。其中,中間件的概念是構(gòu)建高效Node.js應(yīng)用的關(guān)鍵。在這篇博客文章中,我們將深入探討Node.js中間件的高級(jí)應(yīng)用,包括創(chuàng)建自定義中間件、使用第三方中間件等。我們將從基礎(chǔ)講起,逐步深入,旨在為讀者提供全面而深入

    2024年03月22日
    瀏覽(26)
  • 【node.js從入門到精通】使用express創(chuàng)建web服務(wù)器,路由,進(jìn)行中間件的創(chuàng)建鏈接路由及其他中間件

    【node.js從入門到精通】使用express創(chuàng)建web服務(wù)器,路由,進(jìn)行中間件的創(chuàng)建鏈接路由及其他中間件

    目錄 前言 初識(shí)express 使用express創(chuàng)建基本的web服務(wù)器 初識(shí)express路由 路由匹配概念 路由模塊化 中間件 中間件和路由的區(qū)別 定義中間件函數(shù) 中間件作用? ?局部生效中間價(jià) 中間件分類 ?1.應(yīng)用級(jí)別中間件 ?2.路由級(jí)別的中間件 ?3.錯(cuò)誤級(jí)別中間件 ?4.內(nèi)置中間件 ?5.自定義中間

    2024年02月02日
    瀏覽(63)
  • 在Node.js中,什么是中間件(middleware)?它們的作用是什么?

    在Node.js中,什么是中間件(middleware)?它們的作用是什么?

    聚沙成塔·每天進(jìn)步一點(diǎn)點(diǎn) 前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個(gè)專欄是為那些對(duì)Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些基礎(chǔ)的開發(fā)者,這里都將為你提供一個(gè)系統(tǒng)而

    2024年02月06日
    瀏覽(29)
  • 基于Promise.resolve實(shí)現(xiàn)Koa請(qǐng)求隊(duì)列中間件

    基于Promise.resolve實(shí)現(xiàn)Koa請(qǐng)求隊(duì)列中間件

    本文作者為360奇舞團(tuán)前端工程師 最近在做一個(gè) AIGC 項(xiàng)目,后端基于 Koa2 實(shí)現(xiàn)。其中有一個(gè)需求就是調(diào)用兄弟業(yè)務(wù)線服務(wù)端 AIGC 能力生成圖片。但由于目前兄弟業(yè)務(wù)線的 AIGC 項(xiàng)目也是處于測試階段,能夠提供的服務(wù)器資源有限,當(dāng)并發(fā)請(qǐng)求資源無法滿足時(shí),會(huì)響應(yīng)【服務(wù)器繁忙

    2024年02月13日
    瀏覽(15)
  • 82 # koa-bodyparser 中間件的使用以及實(shí)現(xiàn)

    82 # koa-bodyparser 中間件的使用以及實(shí)現(xiàn)

    安裝依賴 koa 文檔:https://koajs.cn/# koa 中不能用回調(diào)的方式來實(shí)現(xiàn),因?yàn)?async 函數(shù)執(zhí)行的時(shí)候不會(huì)等待回調(diào)完成 koa 中所有的異步都必須是 promise,只有 promise 才有等待效果,必須所有的 next 方法前需要有 await、return 否則沒有等待效果 實(shí)現(xiàn)一個(gè)表單提交功能 server.js : 啟動(dòng)服

    2024年02月09日
    瀏覽(21)
  • 第九篇:node靜態(tài)文件服務(wù)(中間件)

    第九篇:node靜態(tài)文件服務(wù)(中間件)

    ????江城開朗的豌豆 :個(gè)人主頁 ????個(gè)人專欄? :《 VUE 》?《 javaScript 》 ??? ?個(gè)人網(wǎng)站? :《 江城開朗的豌豆?? 》? ???生活的理想,就是為了理想的生活?! 當(dāng)今互聯(lián)網(wǎng)時(shí)代,Node.js 成為了最受歡迎的服務(wù)器端開發(fā)平臺(tái)之一。作為一名小白,學(xué)習(xí) Node.js 可能會(huì)讓你感

    2024年02月20日
    瀏覽(18)
  • cool Node后端 中實(shí)現(xiàn)中間件的書寫

    cool Node后端 中實(shí)現(xiàn)中間件的書寫

    1.需求 在node后端中,想實(shí)現(xiàn)一個(gè)專門鑒權(quán)的文件配置,可以這樣來解釋 就是 有些接口需要token調(diào)用接口,有些接口不需要使用token 調(diào)用? 這期來詳細(xì)說明一下 ? ? ?什么是中間件中間件顧名思義是指在請(qǐng)求和響應(yīng)中間,進(jìn)行請(qǐng)求數(shù)據(jù)的攔截處理,數(shù)據(jù)校驗(yàn),并且進(jìn)行邏輯處理

    2024年02月20日
    瀏覽(25)
  • 中間件框架知識(shí)進(jìn)階

    中間件框架知識(shí)進(jìn)階

    近期從不同渠道了解到了一些中間件相關(guān)的新的知識(shí),記錄一下收獲。涉及到的中間件包括RPC調(diào)用、動(dòng)態(tài)配置中心、MQ、緩存、數(shù)據(jù)庫、限流等,通過對(duì)比加深理解,方便實(shí)際應(yīng)用時(shí)候更明確如何進(jìn)行設(shè)計(jì)和技術(shù)選型。 目前主流的RPC中間件包括Dubbo、HSF、Thrift、GRPC、Spring Cl

    2024年01月16日
    瀏覽(28)
  • express框架中間件

    express框架中間件

    說明:Express框架中間件是指在處理HTTP請(qǐng)求前或后對(duì)請(qǐng)求和響應(yīng)進(jìn)行處理的函數(shù)。具體而言,中間件可以: 執(zhí)行一些公共的邏輯,比如身份驗(yàn)證、日志記錄、錯(cuò)誤處理等。 修改請(qǐng)求和響應(yīng),比如緩存、壓縮等。 控制請(qǐng)求流,比如路由控制、URL重定向等。 Express中間件可以是一

    2024年02月13日
    瀏覽(25)
  • gin框架內(nèi)容(三)--中間件

    gin框架內(nèi)容(三)--中間件

    gin框架內(nèi)容(三)--中間件 Gin框架允許開發(fā)者在處理請(qǐng)求的過程中,加入用戶自己的函數(shù)。這個(gè)函數(shù)就叫中間件,中間件適合處理一些公共的業(yè)務(wù)邏輯,比 如登錄認(rèn)證、權(quán)限校驗(yàn)、數(shù)據(jù)分頁、記錄日志、耗時(shí)統(tǒng) 計(jì)等 即比如,如果訪問一個(gè)網(wǎng)頁的話,不管訪問什么路徑都需要

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包