文章目录
GET请求
query和queryString区别
**query:**返回的是格式化好的参数对象
**queryString:**返回的是请求字符串
获取方式
- 我们可以通过request对象获取
- 我们执行通过context上下文对象获取
const koa=require('koa');
const app=new koa();
app.use(async(ctx)=>{
let url=ctx.url;
//方式一获取query
let request=ctx.request;
let req_query=request.query;
let req_queryString=request.querystring;
//方式二获取query
req_query=ctx.query;
req_queryString=ctx.querystring;
ctx.body={
url,
req_query,
req_queryString
}
})
app.listen(3000,()=>{
console.log('server is starting at port 3000');
});
POST请求
context中request和req区别
- context.reqeust是Koa2中context经过封装的请求对象
- context.req是context提供的node.js原生HTTP请求对象,虽然不是很直观,但可以过去更多请求信息。
获取Post请求参数:
- 解析上下文ctx的原生nodeJS对象req
- 将POST数据解析成queryString形式(例如:user=‘cc’&age=‘20’)
- 将字符串转换成JSON
//将post请求参数 转换成字符串
//输出结结果形式:userName=sdf&age=sfd
function parsePostData(ctx){
return new Promise((resolve,reject)=>{
try {
let postData='';
ctx.req.on('data',data=>{
postData+=data;
})
ctx.req.addListener('end',function(){
resolve(postData);
})
} catch (error) {
reject(error);
}
})
}
/**
* 功能:将字符串解析JSON对象
* queryStr: userName=sdf&age=sfd
* 功能解析:
* 1. 首先将上面字符串 & 分割后["userName=sdf", "age=sfd"]
* 2. 遍历数组 将数组中元素在 =分割
*/
//将字符串换换成JSON
function parseQueryStr(querystr){
let queryData={};
let queryStrList=querystr.split('&');
console.log(queryStrList);
// for(let [index,querystr] of queryStrList.entries()){
// let itemList=querystr.split('=');
// queryData[itemList[0]]=decodeURIComponent(itemList[1])
// }
queryStrList.forEach(item => {
let itemList=item.split('=');
queryData[itemList[0]]=decodeURIComponent(itemList[1]);
});
return queryData;
}
采用中间件获取post参数
koa-body-parser
npm install koa-bodyparser --save
该中间件将koa2上下文的数据解析到context.request.body中。
使用
- 引入
const bodyParser=require(‘koa-bodyparser’);
- 注册
app.use(bodyParser())
- 使用
ctx.body=ctx.request.body
koa-router
npm install koa-router --save
基本使用
const Koa=require('koa');
const Router=require('koa-router');
const app=new Koa();
const router=new Router();
router.get('/',(ctx,next)=>{
ctx.body='hello cc'
})
app.use(router.routes())
.use(router.allowedMethods());
app.listen(3000,()=>{
console.log('starting at port 3000');
})
设置前缀
比如原来的路径是 http://localhost:3000/,页面会打印 hello cc, 现在我们需要路径 http://localhost:3000/cc 打印信息。
const router=new Router({
prefix:'cc'
})
写入与读取Cookie
- context.cookies.get(name,[options]):读取上下文请求中的cookie
- context.cookies.set(name,value,[options]):在上下文中写入cookie
//设置cookie
ctx.cookies.set(
'MyName', 'cc', {
domain: 'localhost', //写cookie所在的域名
// path: '/index', //写cookie所在的路径
maxAge: 1000 * 60 * 60*24, //cookie有效时长
expires: new Date('2019-1-29'), //cookie失效时间
httpOnly: false, //是否只用于http请求中获取
overwrite: false //是否允许重写
}
);
//读取cookie
if (ctx.cookies.get('MyName')) {
ctx.body = ctx.cookies.get('MyName');
} else {
ctx.body = 'Cookie is none';
}
参考链接:学习技术胖的一些笔记总结
koa-logger: 用于打印日志