cmd新建项目文件夹:mkdir name
初始化项目配置文件:npm init
保存自动重启:npm i nodemon -g;nodemon app.js
安装koa:npm i koa
新建启动文件:app.js
导入、实例化、编写中间件、注册、挂载到端口
导入koa:const Koa = require(‘koa’)
导入导出包:
- commonJS:require
- ES6: import from
- AMD
const Koa = require('koa')//导入koaconst app = new Koa()//实例化// 应用程序对象 中间件// 发送HTTP KOA 接收HTTP// 定义中间件,就是定义普通函数
// function test() {
// console.log('hello,koa')
// }// 注册
// app.use(test)// 匿名注册 一
app.use((ctx, next) => {
// 上下文console.log('hello,111')const a = next() // next的返回结果是一个promisea.then((res) => {
console.log(res)})console.log('hello,222')
})
// 匿名注册 二 async await
app.use(async (ctx, next) => {
// 上下文console.log('hello,111')// await对promise求值const a = await next() // next的返回结果是一个promiseconsole.log(a)console.log('hello,222')
})
app.use((ctx, next) => {
console.log('hello,333')return 'abc'
})app.listen(3000)
async和await
- 表达式求值,不仅仅是promise求值
const a = await 100*100
console.log(a)
->10000
- 对资源的操作是异步的:读文件,发送http请求,操作数据库sequelize
阻塞当前线程
app.use(async (ctx, next) => {
const axios = require('axios')const start = Date.now()const res = await axios.get('https://api.douban.com/v2/movie/imdb/tt0111161?apikey=0df993c66c0c636e29ecbb5344252a4a')const end = Date.now()console.log(end - start)console.log(res)
})
->217
koa框架的ctx上下文传值
koa是用中间件在编程
app.use(async (ctx, next) => {
await next()const a = ctx.rconsole.log(a)
})
app.use(async (ctx, next) => {
const axios = require('axios')const res = await axios.get('https://api.douban.com/v2/movie/imdb/tt0111161?apikey=0df993c66c0c636e29ecbb5344252a4a')ctx.r = res.data.alt_title
})
三、路由系统的改造
app.use(async (ctx, next) => {
console.log(ctx.path)console.log(ctx.method)// 路由if (ctx.path === '/' && ctx.method === 'GET') {
ctx.body = 'hello'}
})
koa-router基本用法
// 导入
const Koa = require('koa')
const Router = require('koa-router')
//实例化
const app = new Koa()
const router = new Router()
// 路径 返回
router.get('/', (ctx, next) => {
ctx.body = {
key: 'hello' }
})
// 注册
app.use(router.routes())app.listen(3000)
根据数据类型,划分主题
API版本:
随着业务的变动,考虑到客户端兼容性,老版本返回‘classic’,新版本返回‘music’,所以服务器要兼容多版本:V1,V2,V3;
客户端发送请求携带版本号:url路径,查询参数,header
分层次:上层调用下层
book.js
const Router = require('koa-router')
const router = new Router()router