Koa2学习(三)GET请求
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
- 其中ctx是Koa2非常重要的一个上下文对象,可以把它理解为一个全局的顶层对象,Koa2里面绝大部分的属性和方法都可以通过ctx对象获取。
- 其中ctx.body就是返回的html内容。
- app.listen(...)是koa2的一个语法糖,等于运行了下面这两个方法,实质就是调用http模块创建一个监听端口的服务。
- 每收到一个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"
}
}
}
总结
- 我们通过
app.use()方法,接收并处理http GET请求。 - 通过
app.use()中传入async方法的ctx对象或者ctx.request获取到请求信息。
Koa2学习(三)GET请求的更多相关文章
- Koa2学习(四)POST请求
Koa2学习(四)POST请求 接受请求 POST请求的数据实体,会根据数据量的大小进行分包传送. 当node.js后台收到post请求时,会以buffer的形式将数据缓存起来.Koa2中通过ctx. ...
- Spring Cloud Hystrix 学习(三)请求合并
什么是请求合并?我们先来看两张图: 上方的两张图中,第二张可以看出服务端只执行了一次响应,这就是请求合并.客户端新增的请求合并模块,内部存在一个等待的时间窗口,将一定时间段内满足条件的请求进行合并,以 ...
- Koa2学习(五)中间件
Koa2学习(五)中间件 Koa2通过app.use(function)方法来注册中间件. 所有的http请求都会依次调用app.use()方法,所以中间件的使用顺序非常重要. 中间件的执行顺序 官方 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
- 三、请求库之requests模块
一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网 ...
随机推荐
- Android获取屏幕大小(Px)
private DisplayMetrics dm = new DisplayMetrics(); TextView tv; Button bu; @Override protected void o ...
- LeetCode(22)Generate Parentheses
题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...
- 更换SpringBoot中默认的web容器为jetty
在pom文件中:<dependency> <groupId>org.springframework.boot</groupId> <artifact>s ...
- php 复制文件夹
public function recurse_copy($src,$des) { $dir = opendir($src); @mkdir($des); while(false !== ( $fil ...
- linux中的vi命令
linux的重要的几个命令如下: ①,光标的操作 1,gg,G,nG,:n gg移到文档的开头一行,G移动到最后一行,nG移动到第n行,到指定的行. 2,H,M,L 光标分别移动到这个界面的最上边,中 ...
- Coreldraw绘制标准波浪线
Coreldraw中如何绘制标准波浪线? 先画一根直线,单击工具栏中的“互动式工具组”,选择“互动式变形工具”, 再在弹出的属性栏中选择“拉链变形”,在幅度和频率中分别输入波形的波峰 到波底的值.波浪 ...
- Food Delivery (区间DP)
When we are focusing on solving problems, we usually prefer to stay in front of computers rather tha ...
- 使用SqlParameter.SqlDbType和SqlParameter.Size时需要注意的地方
1.DbParameter类是SqlParameter和OracleParameter类的父类.DbParameter.Size用来获取或设置列中数据的最大尺寸(只对文本数据有用). 2.数据类型Ch ...
- oracle导出多CSV文件的靠谱的
oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...
- [luoguP2886] [USACO07NOV]牛继电器Cow Relays(矩阵)
传送门 矩阵快速幂,本质是floyd 把 * 改成 + 即可 注意初始化 因为只有100条边,所以可以离散化 #include <cstdio> #include <cstring& ...