Koa介绍
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
以上解释来自官网,简单来说就是Koa是由Express框架的开发人员打造的新的后端框架,使用最新的async/await语法来解决请求异步回调问题。
Koa VS Express
用法
- Koa:使用async/await语法解决回调问题
- Express:基于回调,error-first模式
中间件
- Koa:洋葱模型
- Express:线性模型
集成
- Koa:需要自己安装koa-static和koa-router
- Express:自带static模块和router模块
使用人数
现在来说koa的使用人数比Express还是要少很多的,npm相关的包数量相差也很多。
Koa用法特点讲解
以Koa和Express开启服务器的代码为例:
// koa写法
const Koa = require('koa')
const app = new Koa()
app.use(ctx => {
ctx.body = "hello world!"
}
)
app.listen(3000)
//Express写法
const Express = require('express')
app.use((req,res,next) => {
res.status(200).send("Hello world").end()
})
app.listen(3000)
上下文对象(Context)
Koa用Context对象取代了Express中的request和response对象,即将节点的请求和响应对象都封装在一个对象中。每个请求都会创建一个Context对象,并在中间件中作为一个默认参数使用:
app.use(async ctx => {
ctx.request; // 代表http request
ctx.response; // 代表http response
})
常用API
- response.body:返回给用户的内容
- response.type:返回内容的类型
- request.accept:请求所能接受的返回内容的类型
- ctx.throw:抛出异常,参数是指定的错误码和错误信息
- ctx.cookie:读写
cookie
对象 - ctx.query:返回get请求的格式化后的参数
- ctx.querystring:返回get请求的参数字符串
中间件(middleware)
Koa中的中间件一般是由async/await
来实现(异步操作)的,执行顺序为很像递归操作的洋葱圈模型。中间件之间的互相调用通过next()
函数来实现控制权的转交,当中间件不再执行next()
函数之后将会返回上级中间件,由后往前顺序执行剩下的内容。相对的,Express的中间件是一个接一个的顺序执行,所以一般会将response写到最后一个中间件里。
相对Express来说,koa更加灵活,由开发者自行决定选择什么样的插件来进行业务代码的构筑。
Mongoose
Mongoose是Node.js用于连接MongoDB的一个库,使用一种模板式的ORM方法来对数据库中的数据进行增删查改操作。
基本概念
- Schema:相当于数据定义的模板,通过Schema可以定义数据的属性(对应数据库的字段属性)
- Model:相当于数据的父类,里面有Schema定义的属性和类型内容(对应数据库的一张表?)
- Instance:实例,在新增的时候会有用,相当于数据表中的一条记录
常用API
- find():查询操作,可以填入参数进行条件查找,不填则会返回全部数据
- update():更新操作,对数据库中的某条数据进行更新
- remove():删除操作,删除数据库中的某条记录
- save():增加操作,增加一条数据记录,实例方法
示例
const {
Schema, model } = require("mongoose");
// 定义User Schema
const UserSchema = new Schema({
// 用户名字段
username: {
type:'String', // 字符串类型
required: true // 必填
},
password: {
type: 'String', // 字符串类型
required: true // 必填
}