当前位置: 代码迷 >> 综合 >> koa2 note
  详细解决方案

koa2 note

热度:69   发布时间:2023-11-21 18:34:54.0

文章目录

    • GET请求
      • query和queryString区别
        • 获取方式
    • POST请求
      • context中request和req区别
      • 获取Post请求参数:
      • 采用中间件获取post参数
    • koa-router
      • 基本使用

GET请求

query和queryString区别

**query:**返回的是格式化好的参数对象
**queryString:**返回的是请求字符串

获取方式

  1. 我们可以通过request对象获取
  2. 我们执行通过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请求参数:

  1. 解析上下文ctx的原生nodeJS对象req
  2. 将POST数据解析成queryString形式(例如:user=‘cc’&age=‘20’)
  3. 将字符串转换成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: 用于打印日志

  相关解决方案