项目搭建
初始化项目:npm init -y
安装koa:npm install koa
,默认就是安装koa2
新建index.js文件,并引入koa,进行实例化
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx)=>{
// ctx是koa自带的对象,包含request和response
ctx.body = 'Hello World';
})
// 设置监听端口
app.listen(3000,()=>{
console.log('app is starting at port 3000');
});
在命令行输入node index.js
运行
Get请求
ctx:上下文对象
app.use(async (ctx)=>{
// 获取请求地址
const url = ctx.url; // 端口号后面的部分
// 获取请求方法
const method = ctx.method; // 'GET'
// 获取请求对象
const request = ctx.request;
// 从request中获取get请求参数
const query = request.query; // 已经转换为对象
const querystring = request.querystring; // ?后面的字符串内容
// 从ctx中获取get请求参数(和在request获取是一样的)
const query2 = ctx.query;
const querystring2 = ctx.querystring;
})
Post请求
获取Post请求的步骤:
- 解析上下文ctx中的原生nodex.js对象req。
- 将POST表单数据解析成query string-字符串.(例如:user=jspang&age=18)
- 将字符串转换成JSON格式。
// 解析post请求对象中的参数
function parsePostData(ctx){
return new Promise((resolve,reject)=>{
// 传的参数有问题,或者没传参数会有失败
try{
let postdata="";
// req是原生的node对象,监听数据传入事件,一个参数触发一次
// on函数是koa提供的,原生的是addListener
ctx.req.on('data',(data)=>{
postdata += data
})
ctx.req.addListener("end",function(){
// 上一步接收完data之后的postdata字符串就是跟get方式得到是一样的形式:'key=value&key=value'
let parseData = parseQueryStr( postdata )
resolve(parseData);
})
}catch(error){
reject(error);
}
});
}
// 把参数字符串解析为对象返回
function parseQueryStr(queryStr){
let queryData={};
let queryStrList = queryStr.split('&');
console.log(queryStrList);
for( let [index,queryStr] of queryStrList.entries() ){
let itemList = queryStr.split('=');
console.log(itemList);
queryData[itemList[0]] = decodeURIComponent(itemList[1]);
}
return queryData
}
ctx.request和ctx.req的区别
- ctx.request:是Koa2中context经过封装的请求对象,它用起来更直观和简单。
- ctx.req:是context提供的node.js原生HTTP请求对象。这个虽然不那么直观,但是可以得到更多的内容,适合我们深度编程
接收并解析POST请求的中间件
koa-bodyparser就是一个这样的中间件。对于POST请求的处理,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中。
npm install koa-bodyparser
引入和使用
const bodyParser = require('koa-bodyparser');
app.use(bodyParser());
在代码中使用后,直接可以用ctx.request.body进行获取POST请求参数,中间件自动给我们作了解析。