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实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
jcrop基本参数一览
2013/07/16 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
基于Vue制作组织架构树组件
2017/12/06 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python正则实现提取电话功能
2018/02/24 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python适配器模式代码实现解析
2019/08/02 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
python写一个随机点名软件的实例
2019/11/28 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
教师党员公开承诺事项
2014/05/28 职场文书
文艺演出策划方案
2014/06/07 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
开学第一周值周总结
2015/07/16 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书