前言
Koa 是一个新的、基于Node.js平台的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。
一、基本用法
Koa 必须使用 7.6 以上的Node版本。如果你的版本低于这个要求,就要先升级 Node;
如何查看node版本:
打开运行(快捷键:win+R),然后输入cmd打开命令行工具,在命令行里输入:node -v
1.如何安装koa?
进入之后,我们初始化生产package.json 文件
1 | npm init -y |
生成package.json后,安装koa包
1 | npm n install --save koa |
2.简单demo
1 | const Koa = require('koa'); |
3.如何运行?
使用node命令,后面加上你想要运行的js的名称(假设js的名字为index)。
1 | $ node index.js |
访问3000端口
1 | 访问 http://127.0.0.1:3000 |
4.什么是async和await?
async
async是异步的简写,表示声明一个异步方法。
使用 async function
可以定义一个 异步函数, 语法为:
1 | async function name([param[, param[, ... param]]]) { statements }1 |
async
函数的返回值很特殊: 不管在函数体内 return
了什么值, async
函数的实际返回值总是一个 Promise
对象. 详细讲就是:
若在
async
函数中return
了一个值x
, 不管x
值是什么类型,async
函数的实际返回值总是Promise.resolve(x)
.
那么 Promise.resolve(x)
最终返回一个什么样的promise呢? 来看一下MDN的介绍:
Promise.resolve(value)方法返回一个以给定值解析后的Promise对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);否则以该值为成功状态返回promise对象。
参考链接:https://blog.csdn.net/juhaotian/article/details/78934097
await
await可以堪称async wait的简写。await
操作符用于等待一个 Promise
对象, 它只能在异步函数 async function
内部使用。await
在等待 Promise 对象时会导致 async function
暂停执行, 一直到 Promise 对象决议之后才会 async function
继续执行.
注意:await必须在async方法中才可以使用因为await访问本身就会造成程序停止堵塞,所以必须在异步方法中才可以使用。
1 | async function testAsync() { |
结果返回的是Promise。
1 | Promise {'hello async'} |
5.Get请求的接收
获得GET请求的方式有两种,一种是从request中获得,一种是一直从上下文ctx中获得。
1.通过request接收
在koa2中GET请求通过request接收,但是接受的方法有两种:query和querystring。
通过下面的例子来说明它们两个的区别。
1 | const Koa = require("koa"); |
在http://127.0.0.1:3000 中的显示结果为:
1 | { |
如果在http://127.0.0.1:3000 后面加上一些数据,如 http://127.0.0.1:3000?name=whitttney&age=24
显示的结果为:
1 | { |
由上面结果可以看出query和querystring区别:
1 | query:返回的是格式化好的参数对象。 |
2.直接从ctx中获取Get请求
除了在ctx.request中获取Get请求外,还可以直接在ctx中得到GET请求。ctx中也分为query和querystring。
简单demo如下:
1 | const Koa = require("koa"); |
在 http://127.0.0.1:3000?name=whitttney&age=24显示结果为:
1 | { |
6.post请求的接收
1 | const Koa = require("koa"); |
如何安装中间件koa-bodyparser
?
npm install --save koa-bodyparser@3
如何使用中间件koa-bodyparser
?
1.require进行引入
1 | const bodyParser = require('koa-bodyparser'); |
2.然后进行使用,如果不使用是没办法调用的
1 | app.use(bodyParser()); |
3.最后可以直接通过ctx.request.body
获取json格式的请求结果。
二、中间件
1.什么是中间件?
中间件处在 HTTP Request 和 HTTP Response 中间,用来实现某种中间功能。
app.use()
用来加载中间件。基本上,Koa 所有的功能都是通过中间件实现的。每个中间件默认接受两个参数,第一个参数是 Context 对象,第二个参数是
next
函数。只要调用next
函数,就可以把执行权转交给下一个中间件。
2.koa-bodyparser中间件原理:
1 | function parsePostData(ctx) { |
decodeURIComponent是什么作用?
使用 encodeURIComponent() 对 URI 进行编码。
使用 decodeURIComponent() 对编码后的 URI 进行解码。
1 | var test1="http://www.baidu.com" |
结果:
1 | http%3A%2F%2Fwww.baidu.com<br /> |
3.合成中间件
koa-compose模块可以将多个中间件合成为一个。
安装koa-compose:npm install koa-compose
1 | const Koa = require('koa'); |
三、路由
1.原生方法简单实现路由
1 | const Koa = require("koa"); |
2.设置路由
(1)设置前缀,全局改变路径(所有路径前都要加路径)
原来:http://127.0.0.1:3000/
打开时,页面显示hello
;
http://127.0.0.1:3000/todo
打开时,页面显示todo page
。
设置前缀后:
http://127.0.0.1:3000/
http://127.0.0.1:3000/todo
显示Not Found
;
http://127.0.0.1:3000/whittney/
打开时,页面显示hello
;
http://127.0.0.1:3000/whittney/todo
打开时,页面显示todo page
。
1 | const Koa = require("koa"); |
(2)单个页面前加路径
1 | const Koa = require("koa"); |
给出各个路径:
home whittney page: http://127.0.0.1:3000/home/whittney
home todo page: http://127.0.0.1:3000/home/todo
test page: http://127.0.0.1:3000/home/test/testpage
加载资源和相关依赖库
1 | // resources |
其中:
koa
是最核心的库,app
是koa
生成的 web 服务主程序;koa-logger
和koa-route
都是koa官方开发的“中间件”,分别用来打印日志和路由设置;fs
和path
都是 Node 的官方包,用来进行本地文件和路径相关的处理,辅助性质的;co-views
是用来渲染模板的库,而render
是它生成的实例。
参考资料: