koa2获取HTTP请求参数

news2024/11/18 10:27:48

HTTP

什么是HTTP

HTTP,即超文本传输协议,是一种实现客户端和服务器之间通信的响应协议,它是用作客户端和服务器之间的请求。

客户端(浏览器)会向服务器提交HTTP请求;然后服务器向客户端返回响应;其中响应包含有关请求的状态信息,还可能包含请求的内容。

HTTP的请求方式

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式

其中:
HTTP1.0定义了三种请求方法: GET, POSTHEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法

最常用的四种请求方法:GET, POST, PUT, DELETE

获取HTTP请求参数

官网地址:https://www.koajs.com.cn/#context

更多精彩内容,请微信搜索“前端爱好者戳我 查看

获取get请求

以下两种方式二选一

let { id } = ctx.request.query 
let { id } = ctx.query

实例


const router = new Router({
    prefix: '/user'
}) 

router.get('/del', async (ctx) => {
   let { id } = ctx.request.query 
    console.log(id)
    ctx.body = "删除用户"
})

发送请求

结果

实例2


const router = new Router({
    prefix: '/user'
}) 

router.get('/del', async (ctx) => {
    let { id } = ctx.query
    console.log(id)
    ctx.body = "删除用户"
})

发送请求

结果

获取post请求

使用ctx.request.body(此方法错误)

router.post('/add', async (ctx) => {
	let {username,pwd} = ctx.request.body
	console.log(username,pwd)
	ctx.body = '添加用户'
})

发送请求

注意: 这里很明显报了500错误,查看控制台,报错如下:

控制台显示

原因ctx.request.body,这个不存在。

解决方案:获取post请求参数,使用原生比较繁琐,需要转换,使用中间件【koa-bodyparser】来获取post请求参数.

使用中间件 koa-bodyparser

安装中间件 koa-bodyparser

npm install koa-bodyparser --save

引入使用中间件

const bodyParser = require('koa-bodyparser')
app.use(bodyParser())

发送请求

结果

获取路由参数

let id = ctx.params.id

实例

router.get('/find/:id', async (ctx) => {
	let id = ctx.params.id
	console.log(id)
	ctx.body = '这是用户首页'
}

发送请求

结果

完整代码

const koa = require('koa')
const bodyparser = require('koa-bodyparser')
const Router = require('koa-router')
const app = new koa()
const router = Router({
	prefix: '/user'
})
 
app.use(bodyparser())
app.use(router.routes())

router.get('/', async (ctx) => { 
	ctx.set("Allow","GET,POST")
	ctx.status = 301
	ctx.body = {
		code: 200,
		msg: '这是请求首页的信息'
	}
})

//  获取路由参数
router.get('/find/:id', async (ctx) => {
	let id = ctx.params.id
	console.log(id)
	ctx.body = '这是用户首页'

})

// 获取get请求参数
router.get('/del', async (ctx) => {
	let {id} = ctx.request.query 
	console.log(id)
	ctx.body = '删除用户'
})

router.get('/del2', async (ctx) => { 
	let {id} = ctx.query
	console.log(id)
	ctx.body = '删除用户'
})

// 获取post请求参数
router.post('/add', async (ctx) => {
	let {username,pwd} = ctx.request.body
	console.log(username,pwd)
	ctx.body = '添加用户'
})

app.listen(3000)

总结

  • 获取get请求参数:ctx.request.query 或者 ctx.query
  • 获取post请求参数:使用中间件【koa-bodyparser
  • 获取路由参数:使用 ctx.params.x x代表需要的参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 Q1 ZK报告

1. ZK数据 2023年4月4日,ZK社区举办了zkSummit 9。 ZK技术应用场景主要分布情况为: 其中: 1)ZK用于隐私场景案例最多,占比12.9%,说明人们对 将ZK技术用于隐私保护 兴趣浓厚。2)ZK用于扩容场景…

超长溢出头部省略打点,坑这么大,技巧这么多?

目录 需求 利用 direction 实现头部超长溢出打点 简单介绍一下 direction: 另外两个与排版相关的属性还有: direction: rtl 会导致使用下划线 _ 连接的数字内容排版错误 多方案解决 方案一:两次 direction 反转 当然,这里…

【高级语言程序设计(一)】第 8 章:结构体类型和自定义类型

目录 前言 一、结构体类型定义 (1)结构体类型定义的一般形式 (2)结构体类型定义的说明 二、结构体类型变量 (1)结构体类型变量的定义和初始化 ① 先定义结构体类型、后定义结构体类型的变量&#xf…

今天用AI创作助手写的文章--Docker提问系列介绍 Docker 的基本概念和优势

目录 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。基本概念:优势: 哪些应用可以部署到docker里面Docker在服务器里面的安装步骤Docker里面的报错如何很仔细的排查解决?总结一下docker 未来发展趋势 介绍 Docke…

安装Arch Linux后要做的十件事

Arch Linux 是一款轻量级、灵活且高度可定制的Linux发行版,被广泛用于个人电脑和服务器。一旦您成功安装了Arch Linux,接下来有一些重要的任务需要完成,以确保系统的稳定性和安全性,并为您的需求做好准备。 本文将详细介绍安装Ar…

C++11 -- 可变参数模板

文章目录 可变参数模板的概念可变模板参数的定义获取可变模板参数包的值递归函数方式展开参数包获取逗号表达式展开参数包获取 STL容器中的emplace相关接口参数emplace_back与STL容器中的push_back的主要区别emplace_back与push_back的差异原理emplate_back与push_back的区别验…

图像算法工程师岗位的主要职责(合集)

图像算法工程师岗位的主要职责 一、确定岗位的职责 1.根据工作任务的需要确立工作岗位名称及其数量; 2.根据岗位工种确定岗位职务范围; 3.根据工种性质确定岗位使用的设备、工具、工作质量和效率; 4.明确岗位环境和确定岗位任职资格; 5.确定各个岗位之间的相互关系; 6.根据岗位…

css元素的显示和隐藏

1. display显示隐藏 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

测试C#分词工具jieba.NET

jieba.NET是jieba中文分词的C#版本&#xff0c;后者是优秀的Python中文分词组件GitHub中得到超过3万星。jieba.NET支持中文分词、关键词提取、词性标注等功能&#xff0c;本文主要测试其中文分词的功能基本用法。   新建测试项目&#xff0c;在NuGet管理器中添加jieba.NET。 …

SpringBoot --- 运维篇

一、打包与运行 1.1、程序打包与运行&#xff08;Windows版&#xff09; 所谓打包指将程序转换成一个可执行的文件&#xff0c;所谓运行指不依赖开发环境执行打包产生的文件。 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做packag…

虹科HiveMQ与MQTT:构建互联汽车的新架构

前言 随着汽车的互联程度越来越高&#xff0c;汽车制造商和互联汽车平台提供商通过使用物联网技术&#xff0c;提供新服务并从车辆收集有价值的遥测数据&#xff0c;以此来增加营收。从高效的车队管理和汽车共享到预测性维护和高级驾驶员辅助系统&#xff0c;未来移动出行的可…

Packet Tracer – 访问控制列表演示

Packet Tracer – 访问控制列表演示 拓扑图 目标 第 1 部分&#xff1a;验证本地连接和测试访问控制列表 第 2 部分&#xff1a;删除访问控制列表和重复测试 背景信息 在本练习中&#xff0c;您将观察如何使用访问控制列表 (ACL) 阻止 ping 访问远程网络上的主机。 从配置…

大数据Doris(二十七):Broker Load导入HDFS数据到Doris表

文章目录 Broker Load导入HDFS数据到Doris表 一、创建Doris表 二、准备HDFS数据 三、准备Broker Load语句

【Springcloud】Feign远程调用

文章目录 1、RestTemplate远程调用2、基于Feign远程调用3、Feign的自定义配置4、Feign性能优化5、Feign的最佳实践思路6、案例 1、RestTemplate远程调用 在说基于Feign远程调用之前&#xff0c;先看一下RestTemplate发起远程调用的问题&#xff1a; String url "http:…

船新SpringBoot 3.1正式发布,新特性真香

Spring Boot 3.1 正式发布 Spring Boot 3.0 发布半年左右&#xff0c;Spring Boot 3.1 正式发布了&#xff1a; 同时发布更新的还有 2.7.x 版本&#xff0c;同时&#xff0c;2.6.x 版本线已经停止维护了&#xff0c;最新支持版本如下图所示&#xff1a; 2.7.x 这也是目前唯一正…

Python条件判断

目录 1. 语法 2. 常见用法 2.1. 比较符判断 2.2. 逻辑符判断 2.3. 成员符判断 2.4. 三目运算 1. 语法 记住3个关键字&#xff1a;if&#xff08;表示如果&#xff09;、elif&#xff08;再如果&#xff09;、else&#xff08;否则&#xff09; if [条件1]&#xff1…

数据链路层概述

1.数据链路层概述 笔记来源&#xff1a; 湖科大教书匠&#xff1a;数据链路层概述 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 数据链路层在网络体系结构中的地位 主机具有体系结构的各个层次&#xff0c;路由器只需具有体系就够的最下面三…

chatgpt赋能python:Python“+”-了解Python中最常用的运算符

Python “” - 了解Python中最常用的运算符 Python是一种高级编程语言&#xff0c;用于开发各种应用程序&#xff0c;从Web应用和桌面应用到数据分析和科学计算。Python是一种简单易学&#xff0c;可读性强的语言&#xff0c;拥有丰富的库和工具。 在Python中&#xff0c;“”…

桥接模式解密:跨越鸿沟,桥接抽象与实现

一、概要 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们都可以独⽴的变化。其核心思想就是解耦&#xff0c;在面向对象编程中&#xff0c;抽象和实现是通过继承关系来实现的&#xff0c;但这…

《C和指针》读书笔记(第八章 数组)

目录 0 内容简介1. 一维数组1.1 数组名1.2 下标引用1.3 指针与下标1.4 指针的效率1.5 数组和指针1.6 作为函数参数的数组名1.7 声明数组参数1.8 初始化1.9 不完整的初始化1.10 自动计算数组长度1.11 字符数组的初始化 2. 多维数组2.1 存储顺序2.2 数组名2.3 下标2.4 指向数组的…