Koa框架
安装包,导出的是一个类,所以首字母大写 const Koa = require('koa')
koa通过创建的app对象,注册中间件只能通过use方法∶const app = Koa(); app.use();
Koa并没有提供methods的方式来注册中间件;也没有提供path中间件来匹配路径;也不可以连续注册
koa中路由的使用
安装库,koa-router。
const Router = require('koa-router')
const router = new Router({prefix:"/users"})//这里配置了后面就不需要再写/users
router.put('/',(ctx,next)=>{
ctx.response.body = "user page"
})
//注册
app.use(srouter.routes())//路由里会有routes这个函数,注册这个函数
参数解析
- ctx.request.url可以直接解析出来
- ctx.request.params也可以直接解析出来
- ctx.request.query 需要安装中间件解析,
npm i koa-bodyparser
,注册app.use(bodyParser())
;- 解析form-data里面的内容,用到koa-multer插件,放到了req.body里面;
- 解析json/www-格式的可以直接解析,内容在response里面
数据响应
输出结果: body将响应主体设置为以下之一∶
- string :字符串数据
- Buffer : Buffer数据
- Stream :流数据
- object||Array:对象或者数组
- null :不输出任何内容
如果response.status尚未设置,Koa会自动将状态设置为200或204。
ctx.response里面的某些属性,比如status等,也可以直接ctx.status访问,因为有些属性源码里面做了代理,等于ctx.response.status
静态资源
引入npm i koa-static
koa和express对比
从架构设计上来说∶
- express是完整和强大的,其中帮助我们内置了非常多好用的功能;
- koa是简洁和自由的,它只包含最核心的功能,并不会对我们使用其他中间件进行任何的限制。甚至是在app中连最基本的get、post都没有给我们提供;
我们需要通过自己或者路由来判断请求方式或者其他功能;
express和koa框架他们的核心其实都是中间件,它们的中间件的执行机制是不同的,特别是针对某个中间件中包含异步操作时:
- express中的next()是个同步函数,所以说,如果里面有异步操作的时候,它是不会等待的。所以说处理异步操作有些乏力。
- koa里面的next()返回值是个promise,所以可以加一个await变成同步,等到完成再返回。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TMBuEBYH-1650546571438)(E:\markdown\前端\csdn\20220421-1.png)]
MySQL
通常我们将数据划分成两类:关系型数据库和非关系型数据库:
- 关系型数据库:MySQL、Oracle、DB2、SQL Server、Postgre SQL等;
- 关系型数据库通常我们会创建很多个二维数据表;
- 数据表之间相互关联起来,形成一对一、一对多、多对多等关系;
- 之后可以利用SQL语句在多张表中查询我们所需的数据;
- 支持事务,对数据的访问更加的安全;
- 非关系型数据库:MongoDB、Redis、Memcached、HBse等;
- 非关系型数据库的英文其实是Not only sQL,也简称为NoSQL ;
- 相当而已非关系型数据库比较简单一些,存储数据也会更加自由(甚至我们可以直接将一个复杂的json对象直接塞入到数据库中)
- NoSQL是基于Key-Value的对应关系,并且查询的过程中不需要经过SQL解析,所以性能更高;
- NoSQL通常不支持事物,需要在自己的程序中来保证一些原子性的操作;
MySQL默认的数据库︰
- infomation_schema:信息数据库,其中包括MySQL在维护的其他数据库、表.列、访问权限等信息
- performance_schema :性能数据库,记录着MySQL Server数据库引擎在运行过程中的一些资源消耗相关的信息﹔
- mysql:用于存储数据库管理者的用户信息、权限信息以及一些日志信息等;
- sys∶相当于是一个简易版的performance_schema,将性能数据库中的数据汇总成更容易理解的形式;
一些指令:
-
查看表 show tables
-
从user表中查询username password:
select username,password from my_db_001.users
-
向表中插入数据。username为tony,password为12345:
insert into my_db_001.users (username,password) values('tony' , '12345')
-
把users表中id为4的用户密码更新为8888:
UPDATE my_db_001.users set password='8888' where id=4
-
把users表中id为2的用户密码更新为111,状态为1:
UPDATE my_db_001.users set password='111',status=1 where id=2
-
删除id为3的整行:
DELETE FROM my_db_001.users where id=3
-
where子句的使用,限制查询条件
-
select * from my_db_001.users where status=1 select * from my_db_001.users where id>2 --username不等于tony select * from my_db_001.users where username<>'tony' --状态为0,且id<3 select * from my_db_001.users where id<3 and status=0 -- 状态为1,或name为tony select * from my_db_001.users where status=1 or username='tony'
-
-
升序:select * from my_db_001.users order by status
-
降序:select * from my_db_001.users order by status DESC
-
先根据status进行降序排序,再根据name字母升序:
select * from my_db_001.users order by status DESC, username asc
-
用count()统计状态为0的用户数:
select count() as total from my_db_001.users where status=0
der by status DESC, username asc`
- 用count()统计状态为0的用户数:
select count() as total from my_db_001.users where status=0
还有GUI工具、一对一、一对多、多对多操作等,在这里就不再赘述,这个公众号里面写的很清楚https://mp.weixin.qq.com/s/OcPKn78Wnj12jGwXLF_nwg,需要的话可以来看