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