Koa2学习(三)GET请求

GET请求是前后端交互最常用的请求之一,常常用来进行查询操作。

那么Koa是如何接收并处理GET请求呢?

创建一个服务

// 引入Koa
const Koa = require('koa')
const app = new Koa()
app.use(async ctx => {
ctx.body = 'Hello World'
})
app.listen(8000) module.exports = app
  1. 其中ctx是Koa2非常重要的一个上下文对象,可以把它理解为一个全局的顶层对象,Koa2里面绝大部分的属性和方法都可以通过ctx对象获取。
  2. 其中ctx.body就是返回的html内容。
  3. app.listen(...)是koa2的一个语法糖,等于运行了下面这两个方法,实质就是调用http模块创建一个监听端口的服务。
  4. 每收到一个http请求,koa就会调用通过app.use()注册的async函数,并传入ctx和next参数。
const http = require('http');
http.createServer(app.callback()).listen(...);

接收请求

koa2每一个请求都会被传入到app.use()方法中,app.use会把请求信息放入到ctx中,我们可以从ctx中获取请求的基本信息。

app.use(async ctx => {
const url = ctx.url // 请求的url
const method = ctx.method // 请求的方法
const query = ctx.query // 请求参数
const querystring = ctx.querystring // url字符串格式的请求参数
ctx.body = {
url,
method,
query,
querystring,
}
})

现在访问localhost:8000?username=zj可以看到浏览器返回

{
"url": "/?username=zj",
"method": "GET",
"query": {
"username": "zj"
},
"querystring": "username=zj"
}

请求url是/?username=zj,请求方法是GET,请求参数是username=zj

ctx还有一个request对象,是http请求对象,我们也可以从ctx.request中获取上面的参数。

app.use(async ctx => {
const req = ctx.request
const url = req.url // 请求的url
const method = req.method // 请求的方法
const query = req.query // 请求参数
const querystring = req.querystring // url字符串格式的请求参数
ctx.body = {
url,
method,
query,
querystring,
req,
}
})

浏览器访问结果:

{
"url": "/?username=zj",
"method": "GET",
"query": {
"username": "zj"
},
"querystring": "username=zj",
"req": {
"method": "GET",
"url": "/?username=zj",
"header": {
"host": "localhost:8000",
"connection": "keep-alive",
"cache-control": "max-age=0",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br",
"accept-language": "zh-CN,zh;q=0.9",
"cookie": "_ga=GA1.1.1379681827.1520244125"
}
}
}

总结

  1. 我们通过app.use()方法,接收并处理http GET请求。
  2. 通过app.use()中传入async方法的ctx对象或者ctx.request获取到请求信息。

Koa2学习(三)GET请求的更多相关文章

  1. Koa2学习(四)POST请求

    Koa2学习(四)POST请求 接受请求 POST请求的数据实体,会根据数据量的大小进行分包传送. 当node.js后台收到post请求时,会以buffer的形式将数据缓存起来.Koa2中通过ctx. ...

  2. Spring Cloud Hystrix 学习(三)请求合并

    什么是请求合并?我们先来看两张图: 上方的两张图中,第二张可以看出服务端只执行了一次响应,这就是请求合并.客户端新增的请求合并模块,内部存在一个等待的时间窗口,将一定时间段内满足条件的请求进行合并,以 ...

  3. Koa2学习(五)中间件

    Koa2学习(五)中间件 Koa2通过app.use(function)方法来注册中间件. 所有的http请求都会依次调用app.use()方法,所以中间件的使用顺序非常重要. 中间件的执行顺序 官方 ...

  4. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  5. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  6. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  7. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  8. Django基础学习三_路由系统

    今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...

  9. 三、请求库之requests模块

    一 介绍   #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网 ...

随机推荐

  1. Android获取屏幕大小(Px)

    private DisplayMetrics dm = new DisplayMetrics(); TextView tv; Button bu; @Override protected void o ...

  2. LeetCode(22)Generate Parentheses

    题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  3. 更换SpringBoot中默认的web容器为jetty

    在pom文件中:<dependency> <groupId>org.springframework.boot</groupId> <artifact>s ...

  4. php 复制文件夹

    public function recurse_copy($src,$des) { $dir = opendir($src); @mkdir($des); while(false !== ( $fil ...

  5. linux中的vi命令

    linux的重要的几个命令如下: ①,光标的操作 1,gg,G,nG,:n gg移到文档的开头一行,G移动到最后一行,nG移动到第n行,到指定的行. 2,H,M,L 光标分别移动到这个界面的最上边,中 ...

  6. Coreldraw绘制标准波浪线

    Coreldraw中如何绘制标准波浪线? 先画一根直线,单击工具栏中的“互动式工具组”,选择“互动式变形工具”, 再在弹出的属性栏中选择“拉链变形”,在幅度和频率中分别输入波形的波峰 到波底的值.波浪 ...

  7. Food Delivery (区间DP)

    When we are focusing on solving problems, we usually prefer to stay in front of computers rather tha ...

  8. 使用SqlParameter.SqlDbType和SqlParameter.Size时需要注意的地方

    1.DbParameter类是SqlParameter和OracleParameter类的父类.DbParameter.Size用来获取或设置列中数据的最大尺寸(只对文本数据有用). 2.数据类型Ch ...

  9. oracle导出多CSV文件的靠谱的

    oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...

  10. [luoguP2886] [USACO07NOV]牛继电器Cow Relays(矩阵)

    传送门 矩阵快速幂,本质是floyd 把 * 改成 + 即可 注意初始化 因为只有100条边,所以可以离散化 #include <cstdio> #include <cstring& ...