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学习笔记之入门篇
Apr 16 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
nodejs根据ip数组在百度地图中进行定位
Mar 06 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
php微信开发之关注事件
2018/06/14 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
让python json encode datetime类型
2010/12/28 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
党课心得体会范文
2014/09/09 职场文书