koa是干什么:koa是用来解决回调嵌套的方案,减少异步回调,提高代码的可读性和可维护性同时也改进了错误处理( Express的错误处理相当糟糕)
koa相比express的优点在哪里
1、更加优雅简单的中间机制
2、更加优雅简单的异步处理
3、更加优雅简单的编程方式
一、安装和使用koa
1、检查node版本,低于7.6是不支持的。
查找node安装位置命令行 : where node
2、选择需要安装或操作的文件夹, npm init -y 生成.json文件
npm i --save koa
二、get请求的接收
在koa2中 get请求通过 request 接收 ,接收方法分别是:query 和 qureystring
query : 返回的是格式化好的参数对象,
querystring :返回的是请求的字符串
案例:
新建一个 index.js 的文件
const Koa = require('koa')
const app = new Koa()
app.use(async(ctx)=>{
let ctxx = ctx
let url = ctx.url
//1、从require 里面获取 query 和 querystring
let request = ctx.request
let a_query = request.query
let a_querystring = request.querystring
//2、从上下文直接获取 query 和 querystring
let b_query = ctx.query
let b_querystring = ctx.querystring
ctx.body={
url,
a_query,
a_querystring,
b_query,
b_querystring
}
})
app.listen(3000,()=>{
console.log("OK")
})
三、post接收和解析
用户是GET请求时,通过表单来模拟POTS请求提交并解析
const Koa = require('koa');
const app = new Koa();
app.use(async(ctx)=>{
//用户是get请求时,显示表单
if(ctx.url==="/" && ctx.method==="GET"){
//get请求创建表单
ctx.body = `
<h1>koa2</h1>
<form method="POST" action="/">
<p>userName</p>
<input type="text" name="userName"/>
<p>age</p>
<input tpye="text" name="age"/>
<button type="submit">提交</button>
</form>
`
}else if(ctx.url==="/" && ctx.method==="POST"){
//post请求打印
let postdatas = await parsePostData(ctx)
ctx.body = postdatas
}else{
//其他请求显示404
ctx.body=`
<h1>404</h1>
`
}
});
//解析node原生POST参数
function parsePostData(ctx){
return new Promise((resolve,reject)=>{
//Promise 调用成功
try{
let postdata = ""
//koa 监听
ctx.req.on("data",(data)=>{
postdata += data
})
//执行结束以后返回
ctx.req.addListener("end",function(){
let postList = parsingStr(postdata)
resolve(postList)
})
}catch(err){
reject(err)
}
})
}
//打字符串解析成json
function parsingStr(str){
let parsingData = {}
let parsingList = str.split("&")
for(let value of parsingList){
let item = value.split('=')
parsingData[item[0]] = item[1]
}
return parsingData
}
app.listen(3000,()=>{
console.log("OK")
})
四、安装中间件来解析post
通过安装 koa-bodyparser@3 中间件 来解析 POST 数据 (就不用在手动去POST数据解析出来了)
1、安装 npm i --save koa-bodyparser@3
2、引入插件 : const bodyParser = require('koa-bodyparser')
3、注册插件 : app.use(bodyParser ())
4、使用:ctx.body = ctx.request.body //ctx.request 直接就把 POST的数据解析成一个json了