Koa 框架

114 阅读3分钟

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) 中间件的功能包括

  1. 执行任何代码。
  2. 修改请求和响应对象。
  3. 终结请求-响应循环。
  4. 调用堆栈中的下一个中间件。
  5. 如果我的 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();
      });
```