Koa2介绍

koa2简介

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

框架名 作用 异步处理
Express web框架 回调函数
Koa web框架 Generator + yield
Koa2 web框架 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-Timeconst 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) => {// 根据urlconst url = ctx.request.url   //   /api/seller         ../data/seller.jsonlet filePath = url.replace('/api', '')    //   /sellerfilePath = '../data' + filePath + '.json'   //   ../data/seller.jsonfilePath = 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()
}

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

  1. .NET C#基础(5):结构体 - 高性能代码的基石

    0. 文章目的   本文面向有一定.NET C#基础知识的学习者,介绍C#中结构体定义.使用以及特点. 1. 阅读基础   了解C#基本语法   了解.NET中的栈与托管堆 2. 值类型 2.1 .N ...

  2. phpcmsV9 默认主题模板(templates文件目录结构)介绍

    phpcmsV9 默认主题模板(templates文件目录结构)介绍 介绍如下: 介绍如下: 这篇文章则详细的介绍一下系统自带默认模板的文件目录结构.主题模板位于"-\phpcms\temp ...

  3. templates文件夹php,phpcms V9 默认templates主题模板文件目录结构介绍

    这篇文章则详细的介绍一下系统自带默认模板的文件目录结构.主题模板位于"..\phpcms\templates\"文件夹内.而css样式.js文件,以及模板配带的images文件夹则 ...

  4. 对Linux文件系统以及内核结构的基础认知

    1. 什么是文件系统? 常规认知: 文件系统即根目录,严格意义上讲根目录其实不能完完全全代表文件系统,但这样认为其实也能接受. 文件系统:文件系统是操作系统用于明确存储设备组织文件的方法,该方法就是文 ...

  5. [译]Vulkan教程(04)基础代码

    [译]Vulkan教程(04)基础代码 General structure 通用结构 In the previous chapter you've created a Vulkan project w ...

  6. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql/* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码/* 跳过权限验证 ...

  7. python基础代码大全博客园,python基础代码大全解释

    python必背入门代码是什么? python必背代码是:defnot_empty(s):returnsandlen(s.strip())>0#returnsands.strip()#如果直接单 ...

  8. HDFS文件目录结构详解

    Namenode中主要存储fsimage和editlog文件,Datanode中主要存储数据块blk文件.下面分别介绍Namenode和Datanode中的文件存储结构. 文章目录 1 Namenod ...

  9. python基础代码事例-Python简单基础小程序的实例代码

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...

最新文章

  1. Para list设置
  2. 【UI设计】【Photoshop系统设计大作业】【5个页面(引导页\首页*2\个人中心页\登录页)、5000字+实验报告、视频教程】
  3. 【ARM】ARM汇编程序设计(一)
  4. 进度条设置_朋友圈可以设置quot;仅一个月可见quot;了,什么时候出语音进度条呢?内附陈粒小姐姐的新歌哦~...
  5. 使用selenium进行密码破解(绕过账号密码JS加密)
  6. java pdf添加图片水印图片_Java 在PDF中添加文本水印、图片水印
  7. 通过JS和CSS,实现网页加载中的动画效果
  8. vivo硬件测试员干什么的_vivo的新年礼物:用APEX 2019告诉你5G旗舰机该长啥样
  9. VB shell执行程序,直到执行完毕
  10. php对接亿乐社区,亿乐社区对接教程
  11. 浅谈域名抢注和域名投资
  12. mysql基于Python的影院会员管理系统的设计与实现毕业设计源码131621
  13. CTA-敏感行为-修改联系人(新建/更新/删除)
  14. 现在大多数人们用的前端框架有哪些【大盘点】
  15. Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
  16. IP交换机与路由器配置
  17. 基于java的滑雪场学具租赁管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  18. 【树形DP】爱心蜗牛
  19. python将图片转动漫_如何将照片动漫化
  20. npm install 报错 gyp info it worked if it ends with ok npm ERR! gyp verb cli [

热门文章

  1. 一起艳学3步把tomcat配置https(小程序)
  2. web前端字体居中_html里文字居中代码怎么写?_WEB前端开发
  3. ACE 开 发 环 境 构 建 笔 记
  4. Android的WakeLock机制
  5. 听觉与感知的一些基本概念
  6. python中fact用法_Python covariance.EllipticEnvelope方法代码示例
  7. python从集思录获取最近新发可转债信息
  8. 【説明する】グラフ理論
  9. asp.net智能家居网站设计与实现
  10. 零跑股价成绩突出,实现逆风翻盘