美文网首页
让nodejs开启服务更简单--koa篇

让nodejs开启服务更简单--koa篇

作者: 一颗冰淇淋 | 来源:发表于2021-08-08 21:40 被阅读0次

在nodejs原始的http模块中,开启一个服务编码相对麻烦,需要对请求方式及上传的数据进行各种判断,而koa给我们提供了比较便捷的编码方式,同时它还有很多中间件可以直接拿来使用。

首先来看,如何开启一个服务,安装koa,引入Koa构造函数,通过new来创建koa的实例对象,监听8000端口,通过use来处理客户端的请求,use处理的中间件有两个参数,ctx表示上下文,request和response都在ctx中,next表示执行下一个匹配的中间件。以下代码表示当请求方式为get时,响应结果hello world

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

app.use((ctx, next)=>{
  if(ctx.request.method === 'GET'){
    ctx.response.body = 'hello world'
  }
})

app.listen(8000, ()=>{ console.log('8000端口启动') })
image.png

koa本身比较轻量,很多中间库都没有集成在koa内部,需要安装其他的库才能使用,首先常用的就是 koa-router,router 可以自定义路由,可通过get / post 等方法直接调用

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const userRouter = new Router({ prefix: '/user' })

app.use((ctx, next) => {
  next()
})

userRouter.post('/', (ctx, next)=>{
  ctx.response.body = 'post请求'
})

app.use(userRouter.routes())

app.listen(8000, () => { console.log('8000端口启动') })
image.png

在get、post或者其他请求中,通常会携带一些参数,而参数对于我们接收请求返回响应也是非常重要的,get请求的参数通常有两种,分为query和params,query的方式是在url后面拼接问号和键值对的参数,类似于/user?name=kiki,params是在斜线后面添加参数,类似于 /user/1,这个数字1就是不固定的,可以由客户端传递的值,在koa-router中,都可以直接通过ctx.request对象中获取

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const userRouter = new Router({ prefix: '/user' })

app.use((ctx, next) => {
  next()
})

userRouter.get('/:id', (ctx, next)=>{
   ctx.response.body = {
      query: ctx.request.query,
      params: ctx.request.params
   }
})

app.use(userRouter.routes())

app.listen(8000, () => { console.log('8000端口启动') })
image.png

而post请求,常用的方式就是 json,urlencoded和表单上传的form-data,前两者可以通过 koa-bodyparser来处理,在request.body中获取解析后的json数据

const Koa = require('koa')
const app = new Koa()
const bodyParser = require('koa-bodyparser')
const Router = require('koa-router')
const userRouter = new Router({ prefix: '/user'})

app.use(bodyParser())

userRouter.post('/', (ctx, next)=>{
  ctx.response.body = ctx.request.body
})

app.use(userRouter.routes())

app.listen(8000, ()=>{console.log('开启8000端口')})
image.png

而处理以form-data格式发送的请求时,需要通过 koa-multer,通过导入的multer函数来创建upload对象,upload.any() 可以用来接口非文件的数据,upload.single() 传入form-data中的key值来处理上传的文件

const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const userRouter = new Router({ prefix: '/user'})
const multer = require('koa-multer')
const upload = multer()

userRouter.post('/', upload.single("file"), (ctx, next)=>{
  ctx.response.body = {
    body: ctx.req.body,
    file: ctx.req.file
  }
})

app.use(userRouter.routes())

app.listen(8000, ()=>{console.log('开启8000端口')})
image.png

在获取请求参数的过程中,可能存在参数不对需要进行报错提示,这种情况可以把报错进行统一的处理,通过ctx中app去发射一个错误信息,并通过 on函数进行捕获

const Koa = require('koa')
const app = new Koa()
app.use((ctx, next)=>{
  ctx.app.emit('error', new Error('请先登录'), ctx)
})

app.on('error', (err, ctx)=>{
  ctx.body = err.message;
})

app.listen(8000, ()=> {})
image.png

koa与原生的nodejs相比,简化复杂的代码逻辑,让koa的编码更为简单,另一个框架express同样也可以简化编码,编码方式大同小异,可以看看这一篇,让nodejs开启服务更简单--express篇

相关文章

  • 让nodejs开启服务更简单--koa篇

    在nodejs原始的http模块中,开启一个服务编码相对麻烦,需要对请求方式及上传的数据进行各种判断,而koa给我...

  • 让nodejs开启服务更简单--express篇

    上一篇文章说到,nodejs获取客户端请求需要我们自己去处理请求参数、请求方式等,而在express框架内部集成了...

  • koa中间件-express中间件

    node开启http服务 koa开启http服务 express中间件 koa与express

  • koa

    Koa是一个基于nodejs的入门级http服务。 通过利用async函数,更简单化、流程化、模块化的方式实现回调...

  • UMI 服务端渲染

    Umi 开启服务端渲染: 安装 koa、koa-compress、 koa-mount、koa-static、ko...

  • Mysql+Nodejs+Koa2+Vue+Quasar零起点教

    一、启动服务 第一步,启动mysql数据库服务 具体参见【Mysql+Nodejs+Koa2+Vue+Quasar...

  • mongodb安装

    koa配置请看我的另一篇文章nodejs框架koa常用配置 目录 安装mongodb 安装robo 3t node...

  • MongoDB教程

    koa配置请看nodejs框架koa常用配置 目录 安装mongodb 安装robo 3t nodejs连接数据库...

  • nodejs 学习笔记(1)koa2 koa-generator

    koa2是nondejs的开发框架,最近学习nodejs,这里记记笔记 首先安装好nodejs 安装koa2,全局...

  • nodejs 搭建项目流程

    nodejs 搭建项目流程 1、搭建项目需要的插件 koa / koa-router / nodemon【...

网友评论

      本文标题:让nodejs开启服务更简单--koa篇

      本文链接:https://www.haomeiwen.com/subject/jvoovltx.html