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

2、Koa2 路由+cookie的更多相关文章

  1. koa2 中 cookie 存在的中文问题

    koa2  中的 cookie 没办法直接设置中文,会报错 ‘ argument value is invalid ’ 解决办法: 先将它转成 ‘ base64 ’ 编码来存储 new Buffer( ...

  2. koa2路由

    注意:必须导出 文档地址:https://npm.taobao.org/package/koa-router 例: const router = require('koa-router')() rou ...

  3. koa2入门--02.koa2路由

    首先输入在项目文件下使用cmd,输入 npm install koa-router --save const koa = require('koa');//引入koa const Router = r ...

  4. koa2使用&&中间件&&angular2的koa托管

    文章导航 1,koa2使用: 2,写中间件: 3,koa2路由配置angular2; 一.先上代码,一篇,看完koa2中大多基础方法: const Koa=require('koa'); const ...

  5. koa2实现登录注册功能(ejs+mongodb版)

    gtihub仓库地址:(由于国内处于敏感时期,github暂时无法访问) 主要使用的中间件: "ejs": "^2.7.1",(渲染模板) "koa& ...

  6. 《前端之路》--- 重温 Koa2

    目录 一.简单介绍 二. 路由 三.请求数据 四. 静态资源加载 五. 静态资源加载 六. koa2加载模板引擎 七. koa2 中简单使用 mysql 数据库 八. koa2 中使用单元检测 九. ...

  7. koa2 的使用方法:(一)

    1. koa2 使用方法: 安装指令是: npm install koa2 使用koa2 创建项目工程: 1. koa2 (项目工程) 2. 进入项目工程: cd 进入您所创建的项目工程 3. npm ...

  8. 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册

    项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...

  9. ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

随机推荐

  1. JavaScript(DOM编程三)

    节点的移动,insertBefore <body> <p>你喜欢哪个城市?</p> <ul id="city"><li id= ...

  2. CF894A QAQ

    CF894A QAQ 题意翻译 题目大意: 给定一个字符串,字符串长度<=100,现在要求出字符串中'QAQ'的个数,注意,'QAQ'可以不连续,只要有顺序就可以了,例如QABQ也有一个QAQ ...

  3. [HTML5]构建离线web应用程序

    1.检查浏览器是否支持缓存 if(window.applicationCache){ //TODO } 2.在html中加入manifest特性 <html manifest="app ...

  4. ARP协议(3)ARP编程--winpcap&amp;vs2012配置

    好.之前说了那么多.最终到了,我们能够操刀的时候了. 在对ARP协议编程前.我们必需要能控制网络适配器(网卡).这个部分就是驱动! "我们要编写网卡驱动?",对,可是,至少我们现阶 ...

  5. 使用ClassLoader类装载器获取系统资源

    使用ClassLoader类装载器获取系统资源 2010-05-11 16:19:39 分类: Java /* ClassLoader 有两种方法获得系统资源,一个种静态方法,一种是实例方法. 静态方 ...

  6. iOS_6_ToolBar+xib+红楼梦

    终于效果图 BeyondViewController.h // // BeyondViewController.h // 6_ToolBar // // Created by beyond on 14 ...

  7. Spring MVC学习------------核心类与接口

    核心类与接口: 先来了解一下,几个重要的接口与类. 如今不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础. DispatcherServlet   -- 前置控制器 HandlerMap ...

  8. win10 bcdedit加入vhdx启动

    第一步,先用hyper-v.imagex或者其他vhd安装器.将win10 系统安装到一个vhd文件里(vhdx更好.动态扩展等诸多优良特性).比方d:\win10tp.vhdx 第二步,运行例如以下 ...

  9. ZOJ 3633 Alice's present RMQ

     Alice's present Description As a doll master, Alice owns a wide range of dolls, and each of them ha ...

  10. asf

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能  够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向  ,所以把我的经历写出来与大家共勉, ...