关于node.js:让nodejs开启服务更简单koa篇

47次阅读

共计 2636 个字符,预计需要花费 7 分钟才能阅读完成。

在 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 端口启动') })

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 端口启动') })

在 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 端口启动') })

而 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 端口')})

而解决以 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 端口')})

在获取申请参数的过程中,可能存在参数不对须要进行报错提醒,这种状况能够把报错进行对立的解决,通过 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, ()=> {})

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

正文完
 0