nodejs之koa2请求示例(GET,POST)


Posted in NodeJs onAugust 07, 2018

GET 请求

在 koa 中,GET请求获取请求数据request对象中的 query 方法和 querystring 方法, query方法返回的是格式化好的参数,querystring 方法返回的是请求字符串。废话不多说,直接上代码

app.js 中添加如下代码:

router.get('/getData', async (ctx,next) => {
  // 从上下文的request对象中获取
  let request = ctx.request;
  let req_query = request.query; // 获取格式化参数
  let req_querystring = request.querystring; // 获取字符串

  // 从上下文中直接获取
  let ctx_query = ctx.query;
  let ctx_querystring = ctx.querystring;
  let obj = {
    req_query:req_query,
    req_querystring:req_querystring,
    ctx_query:ctx_query,
    ctx_querystring:ctx_querystring
  };
  ctx.response.body = {status:200,msg:'这是get测试的返回数据',data:obj};
});

在index.html中引入jquery,因为用jquery的ajax,然后添加如下代码:

var getTest = () => {
  $.ajax({
    type:'GET',
    url:'/getData?a=1&b=2&c=3',
    dataType:'json',
    success(data){
      console.log(data);
    },
    error (err){
      console.log(err);
    }
  });
}
// 添加一个按钮
<button onclick="getTest()">点击测试get方法</button>

运行项目,点击按钮之后控制台回打印出数据,结果如下

nodejs之koa2请求示例(GET,POST)

POST 请求

因为 koa 没有对 post 请求获取参数进行封装,所以需要通过原生的 nodejs 请求对象 req,将 post 请求数据解析成 string(例如:a=1&b=2&c=3),
再将 string 解析成 json 格式(例如:{“a”:”1”, “b”:”2”, “c”:”3”})

app.js 中添加如下代码:

router.post('/postData',async (ctx,next) => {
  let postData = await parsePostData(ctx);
  console.log(postData);
  ctx.response.body = {status:200,msg:'这是post测试的返回数据',data: postData};
});

// 解析上下文里node原生请求的POST参数
function parsePostData( ctx ) {
  return new Promise((resolve, reject) => {
    try {
      let postdata = "";
      ctx.req.addListener('data', (data) => {
        postdata += data
      })
      ctx.req.addListener("end",function(){
        let parseData = parseQueryStr( postdata )
        resolve( parseData )
      })
    } catch ( err ) {
      reject(err)
    }
  })
}

// 将POST请求参数字符串解析成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])
  }
  return queryData
}

index.html中添加如下代码:

var postTest = () => {
  let obj = {
    name:'啦啦啦',
    description:'我是卖报的小行家'
  };
  $.ajax({
    type:'POST',
    url:'/postData',
    dataType:'json',
    data:obj,
    success(data){
      console.log(data);
    },
    error (err){
      console.log(err);
    }
  });
}
// 添加一个post请求的按钮
<button onclick="postTest()">点击测试post方法</button>

运行,点击按钮之后会打印出如下数据

nodejs之koa2请求示例(GET,POST)

对于一个用惯了 express 的我来说,这样的 post 获取参数方式令我非常的不爽,还好,koa-bodyparser 中间件解决了这个问题

koa-bodyparser

安装

npm i koa-bodyparser ?save

app.js 中引入模块

// 引入模块
const bodyParser = require('koa-bodyparser');
// 挂载到app
app.use(bodyParser());

然后将 post 方法更改为

router.post('/postData',async (ctx,next) => {
  let postData = ctx.request.body;
  ctx.response.body = {status:200,msg:'这是post测试的返回数据',data: postData};
});

这样就简单的太多了,感觉赏心悦目,其结果跟上面的是一样的。

至此,koa 请求方法介绍完毕,可以愉快的写代码了,下一篇,小弟就记录一下koa的错误处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
nodejs基础知识
Feb 03 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
nodeJS实现路由功能实例代码
Jun 08 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 NodeJs
nodejs爬虫初试superagent和cheerio
Mar 05 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
NodeJS实现自定义流的方法
Aug 01 #NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 #NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 #NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 #NodeJs
NodeJS 中Stream 的基本使用
Jul 30 #NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 #NodeJs
nodejs的路径问题的解决
Jun 30 #NodeJs
You might like
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
php实现求相对时间函数
2015/06/15 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
python实现在控制台输入密码不显示的方法
2015/07/02 Python
详解Django中的form库的使用
2015/07/18 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
python 拼接文件路径的方法
2018/10/23 Python
在python中pandas的series合并方法
2018/11/12 Python
Python中遍历列表的方法总结
2019/06/27 Python
详解python程序中的多任务
2020/09/16 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
一年级学生期末评语
2014/04/21 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书