koa2

1. koa2安装

  1. 全局安装koa命令:cnpm i koa-generator -g

  2. 生成项目:Koa2 项目名

  3. 安装依赖:cd 项目名

    cnpm install

  4. 安装nodemon跟cross-env(对不同环境进行监听,热监听):cnpm i nodemon cross-env --save-dev

  5. 修改package.json中的配置:

    "scripts": {
        "start": "node ./bin/www",
        "dev": "cross-env NODE_ENV=dev nodemon --inspect=9829 ./bin/www.js",
        "prod": "cross-env NODE_ENV=prod nodemon ./bin/www.js"
    }
    
  6. 重写启动项目:npm run dev

2. koa2几个知识点

  1. ctx相当于req跟res的结合

  2. 如何返回数据到客户端:ctx.body (注express使用:req.json({}))

    router.get('/string', async (ctx, next) => {
      ctx.body = 'koa2 string'
    })
    
  3. 如何获取客户端传来的json数据:ctx.request.body

    如何获取get请求参数:ctx.query

    如何获取session:ctx.session

  4. 如何添加根路由

    const router = require('koa-router')()
    //根路由
    router.prefix('/users')
    //要访问/bar,它的路径是:/users/bar
    router.get('/bar', function (ctx, next) {
      ctx.body = 'this is a users/bar response'
    })
    
  5. 自定义中间件next前面为啥要加await:中间件函数被async修饰,返回promise对象,由express中next作用可知道next是调用下一个中间件,因此在其前面加上await将异步操作变成同步的写法。

    app.use(async (ctx, next) => {
      const start = new Date()
      await next() 
      const ms = new Date() - start
      console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
    })   
    

3. 登陆:koa-generic-session 跟 koa-redis实现将登陆信息存放到session、redis中

  1. 安装:

    cnpm i koa-generic-session koa-redis redis --save
    
  2. App.js中配置:koa-generic-session、koa-redis设置返回客户端cookie

    const session = require("koa-generic-session");
    const RedisStore = require("koa-redis");
    
    //session配置
    app.keys = ["jiangyf0725"];
    app.use(session({
      cookie: {
        path: '/',
        httpOnly: true,
        maxAge: 24 * 60 * 60 *1000
      },
      //redis跟session进行绑定
      store: RedisStore({
        all: "redis端口号"
      }) 
    }))
    

4. 日志记录

  1. 安装:koa-morgan记录日志

    cnpm i koa-morgan --save
    
  2. 生成环境:将日志写到指定文件中

    开发环境:将日志写在控制

    const path = require("path");
    const fs = require("fs");
    const morgan = require("koa-morgan");
    
    const env = process.env.NODE_ENV;
    if(env == 'dev') {
      //开发环境
      app.use(morgan('dev'));
    }else {
      //生产环境写日志文件路径
      const aceessPathName = path.join(__dirname, "log", "access.log");
      const writeStream = fs.createWriteStream(aceessPathName, {
        flag: "a"
      })
      app.use(
          morgan('combined', {stream: writeStream})
      );
    }
    

5. 中间件实现原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值