我转过几个弯 绕过那个小雨楼
拿着蒲扇摆着衣衫渡着紧箍咒
不问天涯不停留 喝过几壶酒
不过年少白头道义放胸口
倘若明天之后 遥看前尘剑封侯
似那天上神仙无所求
朝朝暮暮君如梦醒十分不为何理由
是真是假是惶恐是无休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
又过了几个弯 算尽天量道莫慌
踏这田园闻这芳草香
跌跌撞撞仗剑天涯折煞不枉无笔良
是梦是幻是温柔是家乡
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
路过这风雨花满楼 片刻都不停留
我本这书生进京赶考留下许多愁
你问有没有时候 我叹这天道默悠悠
能否与我一醉方休
谁能与我一醉方休
koa教程2 路由
koa的路由使用,有一个官方的路由插件koa-router
,安装这个插件并如下方式使用:
const Koa = require("koa");
const Router = require("koa-router");
const app = new Koa();
const router = new Router();
router.get("/", (ctx, next) => {
console.log("进入到路由");
})
app.use(router.routes());
app.listen(8080);
引入路由,并new出路由对象,然后路由对象使用对应的前端请求协议方式来监听路由地址,然后有一个回调方法,最后再将这个router对象通过use注册,router使用routes方法将路由全部注册。
router的协议
- get 请求 (获取数据)
- post 请求 (新增数据,也常用来获取,历史原因,当时没那么多协议扩充)
- put 请求(用于更新资源,多次请求只改变一个资源这种)
- del 请求(用于删除资源)
- patch 请求(是对PUT方法的补充,用来对已知资源进行局部更新,补丁更新)
- all 请求 (可用于所有方法匹配)
除了常见的get和post请求,还有一些请求协议,使用方式都是:router.xxx()
多路由处理
主题或模块划分
当一个项目稍微复杂以后,单一的路由结构或者说所有路由都写在一个js文件里面,是很不合理的,所以常用的方式,都是将路由进行划分,相同的部分拆分为一块,也就是主题或模型划分。
比如,访客路由和用户路由,已登录和未登录。甚至还可以更细化,根据不同的功能,主题,逻辑进行划分,具体就要看项目的需要了,这个是一个不断成长的过程,没有谁的路由一开始就是非常完美的,这是一种经验的累积,但是总体来说,他要有一定的范围区域,这样有利于代码的维护和阅读。
api版本
对于一个项目来说,版本是不可避免的一个问题,当一个api进行更新升级时,也许旧版本的api返回的内容与新的不符合,但是用户那边可能还是使用的老版本,所以后端处理不得不进行兼容处理,兼容用户使用的旧版本,开发新的api版本。
常见的做法就是在api上携带版本路径,做法有三种:
- api路径:
api/v1/xxx/xx
- 查询参数:
api/xxx/xx?version=1
- header:在头信息里面携带版本号
一般来说,兼容三个版本已经是足够了,因为兼容的越多,代码量也越多,维护成本也越大。
那么后端如何进行多个版本之间的兼容,上面的方法只是前端请求时告诉后端我请求的api版本,后端的话,建议是不同的api版本采用不同的路由监听,尽量不要写在一个路由里面,一是代码一多,维护阅读不便,二是写代码有一个原则:修改代码尽量少或者不做,对代码的扩展可以开放;这样做有有一个好处,就是在不影响旧代码的情况下,新的功能依旧可以使用实现。不会影响原来的功能。
拆分
我们将相同主题的路径拆分为一个js文件,自己引入router对象,然后再导出,最后再app.js文件中引入,统一激活。
路由文件1:
const Router = require("koa-router");
const router = new Router();
router.get("/test1", (ctx, next) => {
ctx.body = "test1";
});
module.exports = router.routes();
路由文件2:
const Router = require("koa-router");
const router = new Router();
router.get("/test2", (ctx, next) => {
ctx.body = "test2";
});
module.exports = router.routes();
主文件激活:
const Koa = require("koa");
const app = new Koa();
app.use(require("./router/test1")).use(require("./router/test2"));
app.listen(8080);
省点事就不用再const xxx = require()了,反正直接导出的就是routes。
评论(0)