Koa2基本介绍,文件目录结构和基础代码
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基本介绍,文件目录结构和基础代码相关推荐
- .NET C#基础(5):结构体 - 高性能代码的基石
0. 文章目的 本文面向有一定.NET C#基础知识的学习者,介绍C#中结构体定义.使用以及特点. 1. 阅读基础 了解C#基本语法 了解.NET中的栈与托管堆 2. 值类型 2.1 .N ...
- phpcmsV9 默认主题模板(templates文件目录结构)介绍
phpcmsV9 默认主题模板(templates文件目录结构)介绍 介绍如下: 介绍如下: 这篇文章则详细的介绍一下系统自带默认模板的文件目录结构.主题模板位于"-\phpcms\temp ...
- templates文件夹php,phpcms V9 默认templates主题模板文件目录结构介绍
这篇文章则详细的介绍一下系统自带默认模板的文件目录结构.主题模板位于"..\phpcms\templates\"文件夹内.而css样式.js文件,以及模板配带的images文件夹则 ...
- 对Linux文件系统以及内核结构的基础认知
1. 什么是文件系统? 常规认知: 文件系统即根目录,严格意义上讲根目录其实不能完完全全代表文件系统,但这样认为其实也能接受. 文件系统:文件系统是操作系统用于明确存储设备组织文件的方法,该方法就是文 ...
- [译]Vulkan教程(04)基础代码
[译]Vulkan教程(04)基础代码 General structure 通用结构 In the previous chapter you've created a Vulkan project w ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql/* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码/* 跳过权限验证 ...
- python基础代码大全博客园,python基础代码大全解释
python必背入门代码是什么? python必背代码是:defnot_empty(s):returnsandlen(s.strip())>0#returnsands.strip()#如果直接单 ...
- HDFS文件目录结构详解
Namenode中主要存储fsimage和editlog文件,Datanode中主要存储数据块blk文件.下面分别介绍Namenode和Datanode中的文件存储结构. 文章目录 1 Namenod ...
- 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, ...
最新文章
- Para list设置
- 【UI设计】【Photoshop系统设计大作业】【5个页面(引导页\首页*2\个人中心页\登录页)、5000字+实验报告、视频教程】
- 【ARM】ARM汇编程序设计(一)
- 进度条设置_朋友圈可以设置quot;仅一个月可见quot;了,什么时候出语音进度条呢?内附陈粒小姐姐的新歌哦~...
- 使用selenium进行密码破解(绕过账号密码JS加密)
- java pdf添加图片水印图片_Java 在PDF中添加文本水印、图片水印
- 通过JS和CSS,实现网页加载中的动画效果
- vivo硬件测试员干什么的_vivo的新年礼物:用APEX 2019告诉你5G旗舰机该长啥样
- VB shell执行程序,直到执行完毕
- php对接亿乐社区,亿乐社区对接教程
- 浅谈域名抢注和域名投资
- mysql基于Python的影院会员管理系统的设计与实现毕业设计源码131621
- CTA-敏感行为-修改联系人(新建/更新/删除)
- 现在大多数人们用的前端框架有哪些【大盘点】
- Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
- IP交换机与路由器配置
- 基于java的滑雪场学具租赁管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- 【树形DP】爱心蜗牛
- python将图片转动漫_如何将照片动漫化
- npm install 报错 gyp info it worked if it ends with ok npm ERR! gyp verb cli [