一、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") })
原文:https://www.cnblogs.com/chengxiang123/p/9515305.html