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入门详解(多篇文章结合)
Mar 07 NodeJs
NodeJS制作爬虫全过程(续)
Dec 22 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
nodejs如何获取时间戳与时间差
Aug 03 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
在IIS上安装PHP4.0正式版
2006/10/09 PHP
php error_log 函数的使用
2009/04/13 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
基于Python的接口测试框架实例
2016/11/04 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
基于python实现百度翻译功能
2019/05/09 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
电气工程师岗位职责
2014/01/01 职场文书
技校个人求职信范文
2014/01/25 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
班委竞选稿范文
2015/11/21 职场文书
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android