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

浙公网安备 33010602011771号