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 url验证(url-valid)的使用方法
Nov 18 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
详谈nodejs异步编程
Dec 04 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
nodejs简单抓包工具使用详解
Aug 23 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 高手之路(三)
2006/10/09 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
Python实现字典依据value排序
2016/02/24 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
如何真正的了解python装饰器
2020/08/14 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
语文教学随笔感言
2014/02/18 职场文书
白酒市场营销方案
2014/02/25 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
费城故事观后感
2015/06/10 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL