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")
})

 

posted @ 2018-08-22 00:09  First·林肯  阅读(665)  评论(0编辑  收藏  举报