1. 首页
  2. IT资讯

基于Koa2搭建Node.js 前后端分离开发、部署服务器实战项目 (二)

“u003Cdivu003Eu003Ch1u003E前言u003Cu002Fh1u003Eu003Cpu003E在第一章中,我们简单了解了koa2,接下来我们深入的学习下koa2 强大核心,中间件的使用u003Cu002Fpu003Eu003Ch1u003EMiddleWare 中间件u003Cu002Fh1u003Eu003Cpu003E我们就拿上一章启动的例子来说:u003Cu002Fpu003Eu003Cpreu003Eapp.use(async (ctx, next) => {u003Cbru003E await next()u003Cbru003E ctx.response.type = ‘textu002Fhtml’u003Cbru003E ctx.response.body = ‘<h1>Hello Koa2<u002Fh1>’u003Cbru003E})u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E这就是一个简单的中间件,当我们通过 localhost:3000访问时,每一个http的请求,koa2都会进入由app.use()注册的async函数。u003Cu002Fpu003Eu003Cpu003E这个async的函数其实就是我们所说的中间件,它会传入两个参数,分别是:ctx、next,这两个参数分别是什么呢?我们打印出来不就知道了嘛u003Cu002Fpu003Eu003Ch1u003ECTXu003Cu002Fh1u003Eu003Cpu003E控制台u003Cu002Fpu003Eu003Cpreu003Econsole.log(ctx)u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F5542ffb92b794326bda0e9191a79770b” img_width=”640″ img_height=”557″ alt=”基于Koa2搭建Node.js 前后端分离开发、部署服务器实战项目 (二)” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Ectxu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E可以看到ctx主要是做上下文使用,里面有大家很熟悉的两个对象:request、response ,还有一些常用的属性或者方法,都用ctx去做了代理操作了。使得我们可以很方便的获取这些属性。u003Cu002Fpu003Eu003Cpu003E比如获取请求参数:ctx.request.query 或 ctx.queryu003Cu002Fpu003Eu003Cpu003E优秀的框架总是想得比较周到,koa中本身也内置了一些中间件,比如存储空间的中间件: ctx.stateu003Cu002Fpu003Eu003Cpu003E我们在实际项目中,可以通过 state 可以存储一些数据,比如用户数据,版本信息等,在后续的项目里,我将会带大家实操。u003Cu002Fpu003Eu003Ch1u003ENEXTu003Cu002Fh1u003Eu003Cpu003E next 的作用就是将处理中间件的控制权流转到下一个中间件,而 next() 之后的所有代码,将会在下一个中间件执行,如果下一个中间件还有next(),那就会只到结束后再执行前面的。u003Cu002Fpu003Eu003Cpu003E可能文字写的有点绕,我们继续搞点小demo来看看,就知道了:u003Cu002Fpu003Eu003Cpu003E修改app.js中间件:u003Cu002Fpu003Eu003Cpreu003Eu002Fu002F 中间件执行的时间u003Cbru003Eapp.use(async (ctx, next) => {u003Cbru003E let starTime = new Date().getTime()u003Cbru003E console.log(`响应开始时间 : ${starTime}ms`)u003Cbru003E await next()u003Cbru003E let endTime = new Date().getTime()u003Cbru003E ctx.response.type = ‘textu002Fhtml’u003Cbru003E ctx.response.body = ‘<h1>Hello Koa2<u002Fh1>’u003Cbru003E console.log(`响应结束时间:${endTime}ms`)u003Cbru003E console.log(`整体流转时间:${endTime – starTime}ms`)u003Cbru003E});u003Cbru003Eapp.use(async (ctx, next) => {u003Cbru003E console.log(‘中间件1 start’)u003Cbru003E await next();u003Cbru003E console.log(‘中间件1 end’)u003Cbru003E})u003Cbru003Eapp.use(async (ctx, next) => {u003Cbru003E console.log(‘中间件2 start’)u003Cbru003E await next();u003Cbru003E console.log(‘中间件2 end’)u003Cbru003E})u003Cbru003Eapp.use(async (ctx, next) => {u003Cbru003E console.log(‘中间件3 start’)u003Cbru003E await next();u003Cbru003E console.log(‘中间件3 end’)u003Cbru003E})u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E重新node app.js 跑起来,这时你就会看到了详细流转过程u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F820617e267ba4805a6d5f5e0e353f6c0″ img_width=”577″ img_height=”901″ alt=”基于Koa2搭建Node.js 前后端分离开发、部署服务器实战项目 (二)” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Ekoa有个外号:洋葱模型,就是这样来的了,每个中间件是一个个进入,最后一个个出来。这一点在我们的实际项目中是非常实用的,后续我们慢慢深入,大家会发现的。u003Cu002Fpu003Eu003Cpu003E当然有人会问,去掉next()后,后面的中间件会继续执行吗?u003Cu002Fpu003Eu003Cpu003E这当然不会了,想想前面我们说的,next是将处理中间件的权利交给了下一个。u003Cu002Fpu003Eu003Cpu003Eso,大家也可以自己在demo中试一试。u003Cu002Fpu003Eu003Cpu003E下一章,我们再见!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F5e14165f80504deea7be1a1f03c935a8″ img_width=”542″ img_height=”324″ alt=”基于Koa2搭建Node.js 前后端分离开发、部署服务器实战项目 (二)” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fdivu003E”

原文始发于:基于Koa2搭建Node.js 前后端分离开发、部署服务器实战项目 (二)

主题测试文章,只做测试使用。发布者:敢吻,转转请注明出处:http://www.cxybcw.com/11410.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code