koa2+typescript 入门 一
前言: 学习玩具,遇到的问题仅做记录,如果恰好对你有帮助,不胜荣幸。
构建项目
koa init ( koa脚手架)
依赖
xxxx
1.koa-router
1.1 基本用法
router基本用法就是 : router.routes()
一种主要通过koa-router的api来实现的 ,
router.prefix( '/api')
这句话的意思 就是相对于router这个实例来讲, 添加一个全局前缀“/api” ps:这里有坑 这个“/” ,是一定要加的,不然访问不了 路径怎么都对不了
嵌套路由:
因为每个被声明的router实例,都是通过“koa-router”而构造出来的中间件,所以可以使用use方法,进行嵌套
代码示例:
import * as Router from "koa-router";
import Login from "./login/index";
import { Context, Next } from "koa";
const router = new Router();
router.prefix("/Geeker");
router.get("/", async (ctx: Context, next: Next) => {
ctx.body = " index / !";
await next();
});
router.use("/login", Login.routes()).use(Login.allowedMethods());
module.exports = router;
1.2 为路由添加jwt鉴权
概念: json web Token (百度)
koa里,权限主要依赖jsonwebtoken这个js库实现的 , 安装封装好的中间件,koa-jwt
ps:由于koa-jwt依赖了jsonwebtoken,所以安装了koa-jwt之后可以不用安装jsonwebtoken,可以直接
const jwt = require(‘jsonwebtoken’);
npm i koa-jwt
鉴权方式很简单就。。。如下
const koajwt = require('koa-jwt');
app.use(koajwt({
secret: 'zhangnan'
}).unless({
path: [/\/register/, /\/login/, /\/unless/]
}));
1.3 利用ts特性 创建约束
基础知识: ts 函数声明及泛型函数
TypeScript中泛型及泛型函数、泛型类、泛型接口,泛型约束,一文读懂
ok, 看完这两个文章之后对ts里的interface 和 泛型有一个初步的概念,之后上代码
比如,先注册一个通用的返回约束
export interface Result {
code: string;
msg: string;
}
注册好了,有的接口需要一个data参数,盛放数据,但又不是所有接口都需要,诶,继承一下Result,同时加一个私有属性data
export interface ResultData<T = any> extends Result {
data: T;
}
ok 这俩约束定义好了 , 搞个函数,按这俩货约束的方式返回
// 返回一个被约束的对象
const resultBody = function <T extends ResultData>(obj: T): T {
return obj;
};
这段代码翻译一下: 声明一个resultBody函数 , 参数包括一个继承于ResultData的泛型 , 返回参数T
《吃饱了撑的函数》
1.4 好像不是很优雅,向koa实例上挂载一个code对象,统一状态码
资料来源:https://segmentfault.com/q/1010000015934061
百度了半天,没找到什么便于理解,设计的又比较nice的方式,sifou的一个回达可能还靠谱点。
2.连接mysql
之后再写吧