node中间件-koa框架

这篇具有很好参考价值的文章主要介绍了node中间件-koa框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. koa 基本使用

  • 安装 npm i koa
  • koa导出的是一个类,必须用new关键字进行创建
  • koa也是通过注册中间件来完成请求操作的
const koa = require('koa');
//  导出的类,必须用new关键字
const app = new koa()
app.listen(8000, () => {
	console.log('koa 服务器启动~')
})

//  使用koa这里传递两个参数 cxt 与next
app.use((cxt, next) => {
	console.log('匹配中间')
	cxt.body = '使用cxt中的body返回数据'
})

2. 参数解析

  • koa注册的中间件提供了两个参数:
  • ctx:上下文(Context)对象;
    • koa并没有像express一样,将req和res分开,而是将它们作为ctx的属性;
    • ctx代表一次请求的上下文对象;
    • ctx.request:获取请求对象;
    • ctx.response:获取响应对象;
  • next:本质上是一个dispatch,类似于之前的next;

注意点

  1. cxt 上下文有个请求对象一个是request既koa本身的对象,还有一个node 封装的请求对象:req
  2. 两个响应对象:cxt.response 是koa封装的响应式对象 ,txt.res 是node封装的响应式对象
app.use((cxt, next) => {
	 /**  注意点 两个请求对象
	 * @description:  cxt 上下文有两个请求对象一个是request既koa本身的对象,还有一个node封装的请求对象:req
	 * @param {type} 
	 */
	cxt.request   // 
  cxt.req
	/** 响应对象 两个响应对象
	* @description:  cxt.response 是koa封装的响应式对象
	* @param {type} txt.res 是node封装的响应式对象
	* @return: 
	*/
	cxt.body = '使用cxt中的body返回数据'
})

3. 请求路径区分

  • koa通过创建的app对象,注册中间件只能通过use方法:
    • Koa并没有提供methods的方式来注册中间件;
    • 也没有提供path中间件来匹配路径
  • 但是在开发中我们如何将路径和method分离呢?
    • 方式一:根据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. 注册路由中间件
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 服务器启动~')
})

注意allowedMethods用于判断某一个method是否支持:某个请求或者路径是否正确

5 参数解析

  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
  • 注意点 下面路由统一注册为users
const userRouter = new router({ prefix: '/users' })

5.1 params 与query解析

  • params参数 cxt.params.id
  • query参数 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参数与urlencoded 解析

  • 安装依赖: npm install koa-bodyparser;
  • 使用与注册 koa-bodyparser的中间件; app.use(bodyparser())
// 3. post/json  body参数
// 安装库  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参数

  • 解析body中的数据,需要使用multer
  • 安装依赖:npm install --save @koa/multer multer
const upload =multer({})
app.use(upload.any())
app.use((cxt,next)=>{
	console.log(cxt.req.body);
})

6 . 文件上传

具体配置参考文章来源地址https://www.toymoban.com/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 服务器启动~')
})

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. 静态服务器

  • koa并没有内置部署相关的功能,所以需要使用第三方库:
  • 安装依赖 npm install koa-static
const static=require("koa-static")
const app = new koa()
app.use(static('./upload'))

8 响应数据

  • 响应结果:body将响应主体设置为以下之一:
    • string :字符串数据
    • Buffer :Buffer数据
    • Stream :流数据
    • Object|| Array:对象或者数组
    • null :不输出任何内容
    • 如果response.status尚未设置,Koa会自动将状态设置为200或204
const userRouter = new router({ prefix: '/users' })
userRouter.post('/', (cxt, next) => {
	// 1.buffer 响应数据
	// cxt.body=Buffer.from('hello node')
	//  2. 文件流
	// const readerStream = fs.createReadStream('./upload/th5TYWK266.jpg')
	// cxt.type = 'image/jpeg'   // 请求展示图片
	// cxt.body = readerStream
	// 3.响应数组或者对象类型
    cxt.body={
			name:'admin',
			password:123456
		}
})

9 错误处理

  • 在做错误处理统一封装时:cxt上下文可以触发一个emit事件
  • 因此可以使用app.on进行监听事件
const koa = require('koa');
const router = require('@koa/router')
const app = new koa()
app.listen(8000, () => {
	console.log('koa 服务器启动~')
})
const userRouter = new router({ prefix: '/users' })

userRouter.get('/', (cxt, next) => {
	const isAuth = false
	if (isAuth) {
		cxt.body = '登录成功,返回token'
	} else {
		// cxt.body = {
		// 	code: 1001,
		// 	message: '没有进行授权'
		// }
		// 统一处理错误
		cxt.app.emit('errorEvent', 1001,cxt)
	}
})


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

到了这里,关于node中间件-koa框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Node.js从基础到高级运用】十三、NodeJS中间件高级应用

    在现代web开发中,Node.js因其高效和灵活性而备受青睐。其中,中间件的概念是构建高效Node.js应用的关键。在这篇博客文章中,我们将深入探讨Node.js中间件的高级应用,包括创建自定义中间件、使用第三方中间件等。我们将从基础讲起,逐步深入,旨在为读者提供全面而深入

    2024年03月22日
    浏览(84)
  • 【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件

    目录 前言 初识express 使用express创建基本的web服务器 初识express路由 路由匹配概念 路由模块化 中间件 中间件和路由的区别 定义中间件函数 中间件作用   局部生效中间价 中间件分类  1.应用级别中间件  2.路由级别的中间件  3.错误级别中间件  4.内置中间件  5.自定义中间

    2024年02月02日
    浏览(42)
  • 在Node.js中,什么是中间件(middleware)?它们的作用是什么?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月06日
    浏览(32)
  • 基于Promise.resolve实现Koa请求队列中间件

    本文作者为360奇舞团前端工程师 最近在做一个 AIGC 项目,后端基于 Koa2 实现。其中有一个需求就是调用兄弟业务线服务端 AIGC 能力生成图片。但由于目前兄弟业务线的 AIGC 项目也是处于测试阶段,能够提供的服务器资源有限,当并发请求资源无法满足时,会响应【服务器繁忙

    2024年02月13日
    浏览(26)
  • 82 # koa-bodyparser 中间件的使用以及实现

    安装依赖 koa 文档:https://koajs.cn/# koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成 koa 中所有的异步都必须是 promise,只有 promise 才有等待效果,必须所有的 next 方法前需要有 await、return 否则没有等待效果 实现一个表单提交功能 server.js : 启动服

    2024年02月09日
    浏览(35)
  • 第九篇:node静态文件服务(中间件)

     🎬 江城开朗的豌豆 :个人主页  🔥 个人专栏  :《 VUE 》 《 javaScript 》  📝  个人网站  :《 江城开朗的豌豆🫛 》  ⛺️ 生活的理想,就是为了理想的生活 ! 当今互联网时代,Node.js 成为了最受欢迎的服务器端开发平台之一。作为一名小白,学习 Node.js 可能会让你感

    2024年02月20日
    浏览(32)
  • cool Node后端 中实现中间件的书写

    1.需求 在node后端中,想实现一个专门鉴权的文件配置,可以这样来解释 就是 有些接口需要token调用接口,有些接口不需要使用token 调用  这期来详细说明一下      什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理,数据校验,并且进行逻辑处理

    2024年02月20日
    浏览(33)
  • 中间件框架知识进阶

    近期从不同渠道了解到了一些中间件相关的新的知识,记录一下收获。涉及到的中间件包括RPC调用、动态配置中心、MQ、缓存、数据库、限流等,通过对比加深理解,方便实际应用时候更明确如何进行设计和技术选型。 目前主流的RPC中间件包括Dubbo、HSF、Thrift、GRPC、Spring Cl

    2024年01月16日
    浏览(39)
  • express框架中间件

    说明:Express框架中间件是指在处理HTTP请求前或后对请求和响应进行处理的函数。具体而言,中间件可以: 执行一些公共的逻辑,比如身份验证、日志记录、错误处理等。 修改请求和响应,比如缓存、压缩等。 控制请求流,比如路由控制、URL重定向等。 Express中间件可以是一

    2024年02月13日
    浏览(28)
  • gin框架内容(三)--中间件

    gin框架内容(三)--中间件 Gin框架允许开发者在处理请求的过程中,加入用户自己的函数。这个函数就叫中间件,中间件适合处理一些公共的业务逻辑,比 如登录认证、权限校验、数据分页、记录日志、耗时统 计等 即比如,如果访问一个网页的话,不管访问什么路径都需要

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包