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和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
jQuery异步提交表单实例
2017/05/30 jQuery
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
python选择排序算法实例总结
2015/07/01 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
详解python中的index函数用法
2019/08/06 Python
python selenium 获取接口数据的实现
2020/12/07 Python
建筑学推荐信
2013/11/03 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
基层党员对照检查材料
2014/09/24 职场文书
青岛海底世界导游词
2015/02/11 职场文书
欢送会主持词
2015/07/01 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python