美文网首页
关于koa2的基础知识

关于koa2的基础知识

作者: 苏s哈 | 来源:发表于2020-03-17 23:51 被阅读0次

    1、koa2 路由配置

    const Koa = require('koa')
    const router = require('koa-router')()
    
    const app = new Koa()
    
    router
    .get('/', async (ctx) => {
      ctx.body = '首页'
    })
    .get('/news', async (ctx) => {
      ctx.body = '新闻页'
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    

    2、koa2 中的 get 传值以及获取 get 传值

    • 在 koa2 中,GET 传值通过 request 参数接收,但接收的方式有2种,query 和 querystring
      1、query:返回的是格式化好的参数对象
      2、querystring:返回的是请求字符串
    const Koa = require('koa')
    const router = require('koa-router')()
    
    const app = new Koa()
    
    router
    .get('/', async (ctx) => {
      ctx.body = '首页'
    })
    .get('/news', async (ctx) => {
      // 从 ctx 中获取 get 传值
      console.log(ctx.query); // {id: '123'}
      console.log(ctx.querystring); // id=123&name=lisi
      console.log(ctx.url); // 获取 url 地址
      
      // 从 ctx 里面的 request 获取 get 传值
      console.log(ctx.request.query);
      console.log(ctx.request.querystring);
      console.log(ctx.request.url);
      
      
      ctx.body = '新闻页'
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    

    3、koa2 动态路由

    const Koa = require('koa')
    const router = require('koa-router')()
    
    const app = new Koa()
    
    router
    .get('/', async (ctx) => {
      ctx.body = '首页'
    })
    .get('/news/:name', async (ctx, next) => {
      // 获取动态路由的传值
      console.log(ctx.params); // { name: 'sjb' }
      ctx.body = '新闻页'
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    

    4、koa2 中 ejs 模板引擎的使用

    • 安装 koa-views 和 ejs
      npm install --save koa-views
      npm install ejs --save
    const Koa = require('koa')
    const router = require('koa-router')()
    // 引入 koa-views 配置中间件
    const views = require('koa-views')
    const app = new Koa()
    // ejs 模板引擎有2种配置方式,区别是模板文件的后缀名不同
    // app.use(views('views', {
    //   map: {html: 'ejs'} // views 文件中的模板后缀名应为 .html
    // }))
    app.use(views('views', {
      extension: 'ejs' // views 文件中的模板后缀名应为 .ejs
    }))
    // koa中使用ejs
    router.get('/news', async (ctx) => {
      let title = 'sjb'
      await ctx.render('index', {
        title: title // 绑定数据
      })
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    
    • Ejs引入模板
      <%- include public/header.ejs %>
    • Ejs绑定数据
      <%=title%>
    • Ejs绑定html数据
      <%-h%>
    • Ejs模板判断语句
     <% if(true){ %>
            true
    <%} else{ %>
            false
    <%} %>
    
    • Ejs模板中循环数据
    <% for(let i = 0; i < list.length; i++) { %>   
      <% =list[i] %>
        <% } %>
    

    5、koa2 中 ejs 模板引擎在中间件中配置公共数据

    const Koa = require('koa')
    const router = require('koa-router')()
    const views = require('koa-views')
    const app = new Koa()
    
    app.use(views('views', {
      extension: 'ejs' 
    }))
    
    // 注意:我们需要在每一个路由的 render 里面都要渲染一个公共的数据
    /* 
    ctx.state = {  // 放在中间件里面
      session: this.session, // 公共数据
      title: 'app'
    }; 
    */
    // 写一个中间件配置公共的信息
    app.use(async (ctx, next) => {
      ctx.state = {
        session: 'session'
      };
      await next()
      // await ctx.render('user', {
      //   user: 'John'
      // });
    });
    
    router.get('/news', async (ctx) => {
      let list = ['sjb','s','d']
      await ctx.render('index', {
        list
      })
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    

    6、koa2 中 cookies 的使用

    • 中文字符与 base64 字节码的相互转化
    const Koa = require('koa')
    const router = require('koa-router')()
    const render = require('koa-art-template')
    const path = require('path')
    const app = new Koa()
    
    render(app, {
      root: path.join(__dirname, 'views'), // 模板视图的位置
      extname: '.html', // 模板的后缀名
      debug: process.env.NODE_ENV !== 'production' // 是否开启调试模式
    })
    
    router
    .get('/', async (ctx) => {
      let data = '苏'
      let val = new Buffer(data).toString('base64') // 设置cookies时,先把中文字符转化为 base64 字节码
      ctx.cookies.set('name', val, {
        maxAge: 1000*60*60
      })
      await ctx.render('index')
    })
    .get('/news', async (ctx) => {
      
      let data = ctx.cookies.get('name')
      let val = new Buffer(data, 'base64').toString() // 取cookies值时,再用 base64 字节码转化成中文字符
      console.log(val)
      ctx.body = '新闻页' + val
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    

    7、koa2 中 session 的使用

    const Koa = require('koa')
    const router = require('koa-router')()
    const render = require('koa-art-template')
    const path = require('path')
    const session = require('koa-session')
    const app = new Koa()
    
    render(app, {
      root: path.join(__dirname, 'views'), // 模板视图的位置
      extname: '.html', // 模板的后缀名
      debug: process.env.NODE_ENV !== 'production' // 是否开启调试模式
    })
    // 配置 session
    app.keys = ['some secret hurr'] // session 签名
    const CONFIG = {
       key: 'koa:sess',   // cookie key (default is koa:sess)
       maxAge: 50000,  // cookie 的过期时间 maxAge in ms (default is 1 days)
       autoCommit: true, // 自动将 session 值提交到请求头部上
       overwrite: true,  // 是否会覆盖之前设置同名的
       httpOnly: true, // cookie 是否只有服务器端可以访问 httpOnly or not (default true)
       signed: true,   // 签名默认 true
       rolling: false,  // 在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
       renew: false,  // (boolean) renew session when session is nearly expired,
       sameSite: null, // (string) session cookie sameSite options (default null, don't set it)
    }
    app.use(session(CONFIG, app))
    
    router
    .get('/', async (ctx) => {
      ctx.session.username = 'sjb'
      await ctx.render('index')
    })
    .get('/news', async (ctx) => {
      console.log(ctx.session.username)
      ctx.body = '新闻页' + ctx.session.username
    })
    
    // 启动路由
    // router.allowedMethods()的作用:当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    app
      .use(router.routes())
      .use(router.allowedMethods())
    
    app.listen(3000, () => {
      console.log('服务器已启动')
    })
    

    相关文章

      网友评论

          本文标题:关于koa2的基础知识

          本文链接:https://www.haomeiwen.com/subject/nhwtyhtx.html