1.koa 简介
官方地址:Koa (koajs) -- 基于 Node.js 平台的下一代 web 开发框架 | Koajs 中文文档 (bootcss.com) koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。
2.koa的创建
(1)新建koa-demo文件夹,初始化package.jso**
1 | npm init -y
(2)安装Koa模块
1 | npm i koa -S
(3)在项目根目录新建app.js,app.js
// 导入koa模块
const Koa = require('koa');
// 创建koa的实例app
const app = new Koa();
app.use(async ctx => {
ctx.body = "Hello World"
})
// 监听端口
app.listen(3000, () => {
console.log("服务器已启动,http://localhost:3000");
})
(4)使用node命令启动服务器,并访问本地地址端口3000
1 | node app
3. 服务器自动重新部署
(1) nodejs开发辅助工具nodemon
修改代码后,需要重新启动 Koa应用,所做的修改才能生效。若之后的每次代码修改都要重复这样的操作,这样会使效率降低,但是使用了nodemon后,它会监测项目中的所有文件,一旦发现文件有改动,nodemon会自动重启应用
(2)全局安装nodemon
1 | npm i nodemon -g
(3)启动服务的时候用nodemon app.js 代替node app.js
1 | nodemon app
4. Koa中间件
(1)什么是 Koa 的中间件
- 通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以把它叫做中间件
- 在 express 中间件(Middleware)是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一般被命名为 next 的变量。在 Koa 中中间件和 express 有点类似
(2) 中间件的功能包括
- 执行任何代码。
- 修改请求和响应对象。
- 终结请求-响应循环。
- 调用堆栈中的下一个中间件。
- 如果我的 get、post 回调函数中,没有 next 参数,那么就配了。如果想往下匹配的话,那么需要写 next()
(3) 中间件的使用
app.use((ctx, next) => {
ctx.username = '我是xxx';
// 处理完之后放行,不使用next()的话,程序会被挂起来不动了
next();
})
5、Koa路由配置
(1)安装koa-router
1 | npm i koa-router -D
(2)导入koa-router模块并实例化
// 导入koa-router模块
const Router = require('koa-router');
// 创建koa-router的实例router
const router = new Router();
(3)配置,并访问本地地址端口3000
router.get('/', ctx => {
ctx.body = "突突突"
})
app.use(router.routes());
(4)koa-router 提供了 .get、.post、.put 和 .del 接口来处理各种请求,但实际业务上,我们大部分只会接触到 POST 和 GET,所以接下来只针对这两种请求类型来说明。
get:用于接收GET请求
```
router.get('/get', ctx => {
ctx.body = "突突突"
})
app.use(router.routes());
```
post:用于接收POST请求
```
router.post('/', ctx => {
ctx.body = "突突突"
})
app.use(router.routes());
```
all:用于接收GET与POST请求
```
router.all('/', ctx => {
ctx.body = "哈哈哈"
})
app.use(router.routes());
```
(5)获取请求参数
获取get请求参数:`ctx.query`
```
router.get('/get', ctx => {
ctx.body = ctx.query
})
```
获取post请求参数:`ctx.request.body`
当用 post 方式请求时,我们会遇到一个问题:post 请求通常都会通过表单或 JSON 形式发送,而无论是 Node 还是 Koa,都 没有提供 解析 post 请求参数的功能。
获取post请求需要使用koa-body模块
```
npm i koa-body --save
```
```
router.get('/get', ctx => {
ctx.body = ctx.request.body
})
```
使用中间件封装请求参数:把get请求参数和post请求参数都放入params对象
```
app.use((ctx, next) => {
ctx.params = {
...ctx.query,
...ctx.request.body
}
next();
});
```