求知若饥,虚心若愚。
Koa是下一代的Node.js的Web框架。既然说是下一代,那么肯定有上一代咯。
没错,上一代Node.js的Web框架叫Express。
要问它俩有什么共同点,它俩的共同点是两个框架来自同一个团队。
要问它俩最大的不同点,它俩最大的不同点就是轻与重。
讲人话,Koa到底如何理解呢?简单理解,Koa就是一个轻量的服务器,与Java的Tomact类似。
Koa的核心文件总共不超过40KB,Koa只提供封装好的http上下文、请求、响应,以及基于async/await的中间件容器。
轻的好处当然就是灵活,可以直接使用Koa的各类包,来满足你对业务不同的需求。NPM官网到目前为止,已经收录2584个关于Koa的npm包。
这个怎么解释呢?koa2和koa1有很大的区别,koa2利用ES7的async/await的来处理传统回调嵌套问题和代替koa1的generator。
可能听不懂什么意思,没关系,简单讲就是为解决异步。
以前的ES5,接着ES6,最后ES7,举个简单例子。
1 | function ajaxs(callback){ |
1 | function request(url) { |
1 | async function request(url) { |
koa2可以让异步逻辑用同步写法实现,因为其支持async
和await
。该特性可以通过多层 async function
的同步写法代替传统的callback
嵌套。
这样写的后端代码逻辑既清晰,又美观,是不是很先进。以后如果还有能解决异步的最佳方法,相信koa也会与时俱进,及时跟进,就目前而言,使用async/await是解决异步的最佳方法。
中间件是什么?中间件就是指上面的2584个关于Koa的npm包,有点类似Java的jar包。
使用任意一个npm包可没有像Java那么简单,Java只需要导入jar包后build path即可,而JS需要引入且配置。
下面主要讲解常用的koa中间件:koa-router、koa-logger、koa-session、koa-bodyparser。
当然koa和mongoose整合也是必不可少的。
直接上完整的项目代码,首先看下整体的目录结构:
目录讲解:
1 | app/models 模型层,定义各种表结构 |
1 |
|
path:处理文件的路径
fs:提供本地文件的读写能力
a.使用fs、path循环读取models文件夹下面的文件,导入多个表结构model
b.修改mongoose已过时的promise库,将其修改成bluebird
c.配置本地具体的数据库,开启连接
d.监听数据库连接状态
a.koa-logger,实现控制台日志的打印
b.koa-bodyparser,实现Post请求传参
c.koa-session,需要用到session修改用户信息
d.koa-router,配置请求路由
1 |
|
1 | router.post('/user/update', App.hasBody, App.hasToken, User.update); |
该方法的意思是配置一个地址为:api/user/update
的方法,该方法能够更新用户的昵称。
当用户确认修改昵称后,会依次执行公共业务层的hasBody、hasToken及用户业务层的update方法。
hasBody方法判断参数是否缺少、hasToken方法判断是否有accessToken用户的唯一标识,update方法用来更新用户昵称。
这是个递进的方法,一层一层拦截,如果没参数不会执行下面的方法,依次类推。
1 |
|
1 | const mongoose = require('mongoose') |
1 | /** |
async
和await
,再加上ES6的语法,代码简单清爽,一目了然。GET请求:
1 | let number = ctx.query.number;//从query里面获取 |
POST请求:
1 | let number = ctx.request.body.number;//从request的body里面获取 |
1 | let user = ctx.session.user; |
1 | let user = User.findOne(...);//查询一条用户数据 |
1 | //引入mongoose |
1 | ctx.session.user = user;//设置该用户信息进入session |
如:更新用户昵称、上传用户头像、支付等。
1 | router.post('/user/update', App.hasBody, App.hasToken, User.update);//更新用户昵称 |
1 |
|
1 | let code = sms.getCode();//获取6位数验证码 |
总结一下:
Koa功能还是很强大的,和MongoDB一起使用完全能应对中小型业务。
骚年们,继续加油吧!