# Koa快速入门 ## 1. Koa 是什么? > Koa 是 基于Node.js平台的下一代Web开发框架(上一代 就是 Express)。 ## 2. 基本使用 ```js import Koa from 'koa'; import { PORT, HOST } from './config/system.mjs'; const app = new Koa(); app.use((ctx) => { ctx.body = 'Hello, Koa.'; }); app.listen(PORT, HOST, () => { console.log(`服务已启动,URL地址为:${'http://' + HOST + ':' + PORT}`); }); ``` 引入 Koa 类后,通过 `new Koa()`创建app实例。然后在调用对应`listen`方法去监听一个端口号,如果没有报错,即服务启动成功。 然后 `app.use()`方法是给Koa应用程序添加中间件。作用是给所有请求响应数据的。 ## 3. 相关概念 ### 3.1 中间件 > 本质 就是 JavaScript函数。会接受一个参数`ctx`,即上下文对象(整合了Node.js中的request和response两个对象)以及 第二个参数`next`,即为栈中的下一个中间件函数。 > > - 可以在整个请求/响应循环周期内 做任何事情。 > - 还可以修改ctx对象,比如添加路由间共享的数据等 > - 结束请求/响应周期(结束响应) > - 调用下一个中间件 ### 3.2 context对象 > Koa Context 将 node 的 `request` 和 `response` 对象封装到单个对象中,为编写 Web 应用程序和 API 提供了许多有用的方法。 > > **注意:Koa实例app的context属性 是 Context对象的原型。** - `ctx.query` 获取请求URL地址上的查询参数,返回一个Object对象。 - `ctx.body=` 设置响应正文,同时会结束请求/响应周期 - `ctx.status=` 设置HTTP状态码,比如: `ctx.status = 200;` - `ctx.message=` 设置HTTP状态信息 - `ctx.length=` 设置 Content-Length 响应头 - `ctx.type=` 设置 Content-Type 响应头 ### 3.3 路由功能 > Koa非常轻量,并没有内置路由的功能。这样就需要我们自己下载路由功能的中间件--`@koa/router` ```shel npm install @koa/router ``` - 引入Router类 - 通过`new Router()`创建router实例 - 之后即可以通过 router 实例 去定义各种路由端点 - 最后 通过 `app.use(router.routes())`将路由功能注入到应用程序中 - 如果 存在跨域的话,会发生options请求。此时 需要对options请求响应服务端允许哪些请求方法,需要添加这样的代码:`app.use(router.allowedMethods())` **router实例的方法** > url:对应 客户端的请求地址 > > middlewares:对应 对此次请求处理的中间价(可以多个) > > *注意:所有的定义路由的方法 都会返回router实例。在实际开发时,可以选择router实例的连调方式去定义多个路由。* - `router.get(url, middlewares)`定义一个get请求方法的路由 - `router.post(url, middlewares)`定义一个post请求方法的路由 - `router.put(url, middlewares)`定义一个put请求方法的路由 - `router.delete(url, middlewares)`定义一个delete请求方法的路由 ```js import Router from '@koa/router'; const router = new Router(); // 定义一个 get的请求方法 路由 // 第一个参数: 路由的路径 // 第二个参数:路由处理的中间件 router .get('/', (ctx) => { ctx.body = '主页'; }) .get('/about', (ctx) => { ctx.body = '关于-get'; }) .post('/about', (ctx) => { ctx.body = '关于-post'; }); export default router; ```