文章目录
-
- GET请求
-
- query和queryString区别
-
- 获取方式
- POST请求
-
- context中request和req区别
- 获取Post请求参数:
- 采用中间件获取post参数
- koa-router
-
- 基本使用
GET请求
query和queryString区别
**query:**返回的是格式化好的参数对象
**queryString:**返回的是请求字符串
获取方式
- 我们可以通过request对象获取
- 我们执行通过context上下文对象获取
const koa=require('koa');
const app=new koa();app.use(async(ctx)=>{
let url=ctx.url;//方式一获取querylet request=ctx.request;let req_query=request.query;let req_queryString=request.querystring;//方式二获取queryreq_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=sfdfunction 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: 用于打印日志