Koa2基本介绍,文件目录结构和基础代码

Koa2介绍

koa2简介

基于Node.js平台的web开发框架
由Express原班人马打造

框架名作用异步处理
Expressweb框架回调函数
Koaweb框架Generator + yield
Koa2web框架async/await

依赖环境Node v7.6.0及以上





Koa2特点洋葱模型的中间件

支持async\await

在这里插入图片描述
在这里插入图片描述



Koa2快速上手

快速上手

  • 检查Node的环境
    node -v
  • 安装Koa
    npm init -y
    npm install koa
  • 创建并编写app.js文件
    创建Koa对象
    编写响应式函数(中间件)
    监听端口
  • 启动服务器
    node app.js

中间件的特点

  • Koa对象通过use方法加入一个中间件
  • 一个中间件就是一个函数
  • 中间件的执行顺序符合洋葱模型
  • 内层中间件能否执行取决于外层中间件的next函数是否调用
  • 调用next函数得到的是promise对象
    在这里插入图片描述

项目准备

项目准备 → 总耗时中间件 → 响应头中间件 → 业务逻辑中间件 → 允许跨域

项目准备

文件目录结构
在这里插入图片描述
总耗时中间件

  • 第一层中间件
  • 计算执行事件
    一进入时记录开始事件
    其他所有中间件执行完后记录结束时间
    两者相减
  • 设置响应头
    X-Response-Time: 5ms
// 计算服务器消耗时长的中间件
module.exports = async (ctx, next) => {
    // 记录开始时间
    const start = Date.now()
    // 让内层中间件得到执行
    await next()
    // 记录结束的时间
    const end = Date.now()
    // 设置响应头 X-Response-Time
    const duration = end - start
    // ctx.set设置响应头
    ctx.set('X-Response-Time', duration + 'ms')
}

响应头中间件

  • 第二层中间件
  • 获取mime类型
    application/json
  • 设置响应头
    Content-Type:application/json; charset=UTF-8
// 设置响应头的中间件
module.exports = async (ctx, next) => {
    const contentType = 'application/json; charset=utf-8'
    ctx.set('Content-Type', contentType)
    ctx.response.body = '{"success": true}'
    await next()
}
}

业务逻辑中间件

  • 第三层中间件
  • 读取文件内容 ( http://localhost:8888/api/seller )
    获取请求的路径,拼接文件路径
    读取该路径对应文件的内容
  • 设置响应体
    ctx.response.body
// 处理业务逻辑的中间件,读取某个json文件的数据
const path = require('path')
const fileUtils = require('../utils/file_utils')
module.exports = async (ctx, next) => {
    // 根据url
    const url = ctx.request.url   //   /api/seller         ../data/seller.json
    let filePath = url.replace('/api', '')    //   /seller
    filePath = '../data' + filePath + '.json'   //   ../data/seller.json
    filePath = path.join(__dirname, filePath)
    try {
        const ret = await fileUtils.getFileJsonData(filePath)
        ctx.response.body = ret
    } catch (error) {
        const errorMsg = {
            message: '读取文件内容失败',
            status: 404
        }
        ctx.response.body =  JSON.stringify(errorMsg)
    }
    await next()
}

允许跨域

  • 实际是通过Ajax访问服务器
  • 同源策略
    同协议、同域名、同端口
    当前页面的地址和Ajax获取数据的地址
  • 设置响应头

在这里插入图片描述

// 设置响应头的中间件
module.exports = async (ctx, next) => {
    const contentType = 'application/json; charset=utf-8'
    ctx.set('Content-Type', contentType)
    ctx.set("Access-Control-Allow-Origin", "*")
    ctx.set("Access-Control-Allow-Methods", "OPTIONS, GET, PUT, POST, DELETE")
    // 进行下一步
    await next()
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值