当前位置: 代码迷 >> 综合 >> Nodejs Koa2 学习笔记 一
  详细解决方案

Nodejs Koa2 学习笔记 一

热度:68   发布时间:2023-12-22 01:11:03.0

cmd新建项目文件夹:mkdir name
初始化项目配置文件:npm init
保存自动重启:npm i nodemon -g;nodemon app.js
安装koa:npm i koa
新建启动文件:app.js
导入、实例化、编写中间件、注册、挂载到端口
导入koa:const Koa = require(‘koa’)
导入导出包:

  1. commonJS:require
  2. ES6: import from
  3. 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

  1. 表达式求值,不仅仅是promise求值
const a = await 100*100
console.log(a)
->10000
  1. 对资源的操作是异步的:读文件,发送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