koa与koa鉴权

目录

koa框架

 错误中间件 

koa路由中间件

静态⽂件中间件

koa鉴权方式

session-cookie 

 jwt jsonwebtoken

  Oauth(认证授权)

 Restful Api 


koa框架

Koa 是⼀个新的 web 框架,由 Express 幕后的原班⼈⻢打造, 致⼒于成为web 应⽤和 API 开发领域中的⼀个更⼩、更富有表现⼒、更健壮的基⽯。koa通过利用async函数,丢弃了回调函数,增强了错误处理能力。
安装
npm i koa -S

快速搭建

const koa = reauire('koa');
const app = new koa();

app.use(async ctx => {
ctx.body = 'Hello World';
})

app.listen(3000);

处理异步

const Koa = require('koa')
const app = new Koa()
app.use(async (ctx, next) => {
  // 对请求做处理
  console.log('老弟来了~~')
  await next() // 分割线
  const rt = ctx.response.get('X-Response-Time')
  console.log(`...${ctx.method} ${ctx.url} - ${rt}`)//GET / - ms
  console.log('老弟离开了~~')
  console.log(ctx);
})

app.use(async (ctx, next) => {
  const start = Date.now()
  console.log('嗯,我来了')
  await next()
  console.log('嗯,我走了')
  const ms = Date.now() - start
  ctx.set('X-Response-Time', `${ms}ms`)
})

// koa的中间件
app.use(async (ctx, next) => {
  console.log('吃完饭,准备走了')
  ctx.body = 'kiki' //设置响应体`
  console.log('打印body')
})


app.listen(5000, () => {
  console.log('5000端口被监听了~~')
})

运行

 错误中间件 

const Koa = require('koa')
const app = new Koa()
// 错误处理中间
app.use(async (ctx, next) => {
  try {
    await next()
  } catch (error) {
    const { status, data, message } = error
    // switch
    ctx.status = status || 500
    ctx.type = 'json'
    ctx.body = { code: status, message, data }

    // 手动触发全局的错误函数
    ctx.app.emit('error', error, ctx)
  }
})

// koa的中间件
app.use(async (ctx, next) => {
  // ctx.throw()相当于是一个中间件
  ctx.throw(401, '未授权', { data: '你瞅瞅' })
})

app.use(async (ctx) => {
  ctx.body = '错误处理中间件'
})
// 全局的事件监听器
app.on('error', (err) => {
  console.log('全局错误处理:', err.message, err.status, err.data)
})

app.listen(5001, () => {
  console.log('5001端口被监听了~~')
})

运行

 创建全局的error处理

使用koa-log4是koa的一个处理日志的中间件,此模块可以帮助你按照你配置的规则分叉日志消息

  1. 在根目录下新建logger/目录
  2. 在logger/目录下新建logs/目录,用来存放日志文件
  3. 在logger/目录下新建index.js文件

logger/index.js

const path = require('path')
const log4js = require('koa-log4')

log4js.configure({
  appenders: {
    //   访问级别
    access: {
      type: 'dateFile',
      // 生成文件的规则
      pattern: '-yyyy-MM-dd.log',
      // 文件名始终以日期区分
      alwaysIncludePattern: true,
      encoding: 'utf-8',
      // 生成文件路径和文件名
      filename: path.join(__dirname, 'logs', 'access')
    },
    application: {
      type: 'dateFile',
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      encoding: 'utf-8',
      filename: path.join(__dirname, 'logs', 'application')
    },
    out: {
      type: 'console'
    }
  },
  categories: {
    default: { appenders: ['out'], level: 'info' },
    access: { appenders: ['access'], level: 'info' },
    application: { appenders: ['application'], level: 'WARN' }
  }
})

module.exports = {
  // 记录所有访问级别的日志
  accessLogger: () => log4js.koaLogger(log4js.getLogger('access')),
  // 记录所有应用级别的日志
  logger: log4js.getLogger('application')
}

onerror.js

const Koa = require('koa')
const onerror = require('koa-onerror')
const { accessLogger, logger } = require('./logger')
const app = new Koa()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值