zoukankan      html  css  js  c++  java
  • 2、Koa2 路由+cookie

    一、koa2 原生路由的实现

    const Koa = require('koa');
    const app = new Koa();
    const fs = require('fs');
    
    function render(page){
        let pageUrl = `./page/${page}`
        return new Promise((resolve,reject)=>{
        //通过fs 函数的方法 来进行 数据 传输
        fs.readFile(pageUrl,'binary',(err,data)=>{
                    console.log(data)
                    if(err){
                        reject(err)
                    }else{
                        resolve(data)
                    }
                })
        })
    }
    
    async function router(url){
        let page = "404.html";
        switch(url){
            case '/':
                page = 'index.html'
                break;
            case '/index':
                page = 'index.html';
                break;
            case '/todo':
                page = 'todo.html';
                break;
            case '/404':
                page = '404.html';
                break;
            default:
                break;
        }
        //通过浏览器地址栏的参数来判断到底想要使用哪一个页面,相当于一个标识符,传给另一个函数生成一个Promise 传输页面数据,形成路由
        let html = render(page)
        return html
    }
    
    app.use(async(ctx)=>{
        let url = ctx.request.url;
        //调用router函数 来进行路由跳转
        ctx.body = await router(url)
    })
    
    app.listen(3000,()=>{
        console.log("OK")
    })
    

    二、Koa-router 中间件
    安装:npm i --save koa-router

    const Koa = require('koa');
    const Router = require('koa-router');
    
    const app = new Koa();
    const router = new Router();
    
    //使用Koa-router 组件的方法来进行路由操作。 
    router.get('/',function(ctx,next){
        ctx.body = "aaaaaaaaa"
    })
    .get('/todo',function(ctx,next){
        ctx.body = "todo"
    })
    
    //注册 koa-router组件
    app.use(router.routes()).use(router.allowedMethods())
    
    app.listen(3000,()=>{
        console.log("OK,3000")
    })

    三、设置层级
    1、====设置全部的层级,有时候我们想把路由加入一个级别,比如 http://localhost:3000/page/a 在原来a的前面添加page=====

    const Koa = require('koa');
    const Router = require('koa-router');
    const app = new Koa();
    const router = new Router();
    
    let home = new Router();
    home.get('/a',async(ctx,next)=>{
        ctx.body = 'home aaaaaa'
    }).get('/b',async(ctx,next)=>{
        ctx.body = "home bbbbbb"
    })
    
    let page = new Router();
    page.get('/a',async(ctx,next)=>{
        ctx.body = ctx.query
    }).get('/b',async(ctx,next)=>{
        ctx.body = "page bbbbbb"
    })
    
    //加载所有的子路由
    //第一个参数是子路由的名称,后面2个分别是装载
    router.use('/home',home.routes(),home.allowedMethods());
    router.use('/page',page.routes(),page.allowedMethods());
    
    //加载路由中间件
    app.use(router.routes()).use(router.allowedMethods());
    
    app.listen(3000,()=>{
        console.log("OK,3000")
    })

    给所有的路由添加前置的地址:

    const Koa = require('koa');
    const Router = require('koa-router');
    
    const app = new Koa();
    //在各级的路由前面都加上一个层级
    const router = new Router({
        prefix:'/cx'
    });
    
    router.get('/todo',function(ctx,next){
        ctx.body = "todo"
    })
    
    app.use(router.routes()).use(router.allowedMethods());
    
    app.listen(3000,()=>{
        console.log("OK,3000")
    })

    四,设置cookie 取cookie

    const Koa = require('koa');
    const app = new Koa();
    const path = require('path');
    const views = require('koa-views');
    
    //加载模板引擎
    //'./view' 是文件夹的路径,也就是模板所在的位置
    app.use(views(path.join(__dirname,'./view'),{
        extension:'ejs'
    }))
    
    //调用模板引擎
    app.use(async(ctx)=>{
        let title = "hello Koa2"
        //通过ctx.render调用的方法模板,index是模板的名称,title是传递的东西
        await ctx.render('index',{
            title
        })
    })
    
    app.listen(3000,()=>{
        console.log("OK,3000")
    })
  • 相关阅读:
    java 类加载器的委托机制
    java 类加载器
    java 泛型
    java 注解(Annotation)
    java 内省综合案例和Beanutils工具包
    java 内省 了解JavaBean
    Java中的接口
    hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和
    extjs fileuploadfield default value
    linux程序设计——套接字选项(第十五章)
  • 原文地址:https://www.cnblogs.com/chengxiang123/p/9515305.html
Copyright © 2011-2022 走看看