koa2快速入门和搭建后台

1、koa2

在这里插入图片描述

  • 支持async\await
  • 洋葱模型中间件
    在这里插入图片描述

2、快速上手

2.1、安装koa

npm init -y
npm install koa

2.2、创建并编写app.js

  1. 创建koa对象
  2. 编写响应函数(中间件)
  3. 监听端口
  4. 启动服务器
//1.创建koa对象
const Koa  = require("koa");
const app=new Koa();
//2.编写响应函数(中间件)
//ctx:上下文,ctx.request,ctx.response
//next:下一个中间件,下一层中间件是否能够得到执行,取决于next这个函数有没有得到调用
app.use((ctx,next)=>{
    console.log(ctx.request.url);
    ctx.response.body='hello,world'
})
//3.绑定端口号
app.listen(3000);

在这里插入图片描述

2.3、验证洋葱模型

中间件特点

  • koa对象通过use方法加入一个中间件
  • 一个中间件就是一个函数
  • 中间件的执行顺序符合洋葱模型
  • 内层中间件的是否执行取决于外层中间件的next()函数是否调用
  • 调用next函数得到的是promise对象
    在这里插入图片描述
const Koa  = require("koa");
const app=new Koa();
app.use((ctx,next)=>{
    console.log('第一层中间件********1');
    ctx.response.body='hello,world';
    next();
    console.log("第一层中间件********2")
})
app.use((ctx,next)=>{
    console.log('第二层中间件********1');
    next();
    console.log("第二层中间件********2")
})
app.use((ctx,next)=>{
    console.log('第三层中间件');
})
app.listen(3000);

在这里插入图片描述

const Koa  = require("koa");
const app=new Koa();
app.use((ctx,next)=>{
    // console.log('第一层中间件********1');
    ctx.response.body='hello,world';
    next();
    // console.log("第一层中间件********2")
})
app.use((ctx,next)=>{
    // console.log('第二层中间件********1');
    const ret=next();
    console.log(ret);
    // console.log("第二层中间件********2")
})
app.use((ctx,next)=>{
    // console.log('第三层中间件');
    return "i love javascript";
})
app.listen(3000);

在这里插入图片描述

2.4、nodemon

让服务器修改后自动重启动保存工具

npm i nodemon

执行重启动,每次修改后保存就可以重启动服务器端口了

nodemon app.js

3、搭建后台

在data文件下存放做好的json数据
在这里插入图片描述
三个中间件
在这里插入图片描述
文件读取模块
在这里插入图片描述

//app.js
const Koa  = require("koa");
const app=new Koa();
const respDurationMiddleware=require('./middleware/koa_response_duration.js');
const respHeaderMiddleWare=require('./middleware/koa_response_header.js');
const respDataMiddleWare=require('./middleware/koa_response_data.js');
app.use(respDurationMiddleware);
app.use(respHeaderMiddleWare);
app.use(respDataMiddleWare);
app.listen(3000);
//koa_response_data.js
//接口数据
const path=require('path')
const fileUtils  = require("../utils/file_utils.js");
module.exports=async(ctx,next)=>{
    const url=ctx.request.url;
    //对接口url进行字符串处理
    let filePath=url.replace('/api','');
    //处理成文件路径
    filePath='../data'+filePath+'.json';
    filePath=path.join(__dirname,filePath);
    //文件读取
    try{
        const ret=await fileUtils.getFileJsonData(filePath);
        ctx.response.body=ret;
    }
    catch(error){
        const errMsg={
            message:"文件资源不存在",
            state:404
        }
        ctx.response.body=JSON.stringify(errMsg);
    }
    console.log(filePath);
    await next();
}
//koa_response_duration.js
//计算请求响应时间
module.exports=async(ctx,next)=>{
    const start=Date.now()
    await next();
    const end=Date.now();
    const duation=end-start;
    //添加到响应头里
    ctx.set('X-Response-Time',duation+'ms')
}
//koa_response_header.js
//响应头设置,设置跨域响应头
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();
}
//file_utils.js
const fs  = require("fs");
module.exports.getFileJsonData=(filePath)=>{
    return new Promise((resolve,reject)=>{
        fs.readFile(filePath,'utf-8',(error,data)=>{
            if(error){
                reject(error)
            }
            else
            {
                resolve(data);
            }
        })
    })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值