Koa2初体验

2023-12-18 18:32
文章标签 初体验 koa2

本文主要是介绍Koa2初体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、起步

首先创建一个文件夹,然后初始化 package.json :

npm init -y

安装koa2:

cnpm i koa --save

在文件目录下新建一个index.js,然后写下如下代码:

const Koa = require('koa')
const app = new Koa()app.use( async(ctx) => {ctx.body = "hello world"
})
app.listen(1996)
console.log("demo in run")

然后运行这个文件:

nodemon index.js

然后我们就能在后台看见这个:

demo is run

然后打开浏览器,输入 http://127.0.0.1:1996就可以看见这个了:

输入图片说明

这样我们就搭建好了最简单的web服务器。但除了这些,有一点需要知道的是,在koa2中,async函数已经大规模使用了,它很好的处理了异步的逻辑,所以学习koa2之前,劲量将async和await解决掉:

const wait1 = () => {return new Promise(resolve => {resolve(setTimeout(() => {console.log("1s later")}, 1000))})
}const  wait2 = () => {return new Promise((resolve) => {resolve(setTimeout(()=>{console.log("2s later")},2000))})
}
async function test() {const a = await wait1()const b = await wait2()console.log("end")
}
console.log("start")
test()

上面的代码执行起来就是这样的:

start
end
1s later
2s later

它很好的解决了异步的一些麻烦,且写出来的代码的可读性也非常好。

二、请求数据获取

2.1 Get请求的接收

在Koa2中GET请求可以通过 request 接受收,但接受的方式有两种:

  • query:返回的是格式化后的参数对象
  • querystring:返回的请求字符串

我们可以由两种方式来获取GET请求,一种是通过 ctx.request 来获取GET请求,一种则是直接在ctx中得到GET请求:

const Koa = require('koa')
const app = new Koa()app.use(async(ctx) => {const url = ctx.url// 使用 ctx.requestconst request = ctx.requestconst req_query = request.queryconst req_querystring = request.querystring// 直接使用ctx来获取const req_ctx = ctx.queryconst req_ctx1 = ctx.querystringctx.body = {url,req_query,req_querystring,req_ctx,req_ctx1,}})
app.listen(3000,() => {console.log("demo1 is run")
})

然后我们在浏览器中输入 http://127.0.0.1:3000?user=srtian&age=18 来访问页面就可以看到这个(这是经过美化的表现):

输入图片说明

 

2.2 POST请求的接收

在 Koa2 中,没有给对于 POST 请求的处理封装方便的获取参数的方法,需要通过通过解析上下文 context 中的元素 node.js 请求对象 req 来获取。因此获取POST请求的步骤可以理解为以下三步:

  1. 解析上下文 ctx 中的原生 node.js 对象 req。
  2. 将POST表单数据解析成 query string 字符串。
  3. 将字符串转换成 JSON 格式。
const Koa = require('koa')
const app = new Koa()app.use(async(ctx) => {if (ctx.url === '/' && ctx.method === 'GET') {let html = `<h2>This is demo2</h2><form method="POST" action="/"><p>username:</p><input name="username"><p>age:</p><input name="age"><p>website</p><input name="website"><button type="submit">submit</button>                   </form>`ctx.body = html} else if (ctx.url === '/' && ctx.method === 'POST') {let postData = await parsePostDate(ctx)ctx.body = postData} else {ctx.body = '<h2>404</h2>'}
})const parsePostDate = (ctx) => {return new Promise((resolve, reject) => {try{let postData = ""ctx.req.on('data', (data) => {postData += data})ctx.req.addListener("end", function() {let parseData = parseQueryStr(postData)resolve(parseData)})} catch(error) {reject(error)}})
}const parseQueryStr = (queryStr) => {const queryData = {}const queryStrList = queryStr.split('&')console.log(queryStrList)for (let [index,queryStr] of queryStrList.entries()) {let itemList = queryStr.split('=')console.log(itemList)queryData[itemList[0]] = decodeURIComponent(itemList[1])}return queryData
}app.listen(3000, () => {console.log('dom2 is run')
})

然后打开浏览器,输入http://127.0.0.1:3000/:

 

输入图片说明

完善信息后,点击submit:

输入图片说明

koa-bodyparser中间件

显然上面的 POST 请求的接受非常麻烦,至少对我而言,徒手写个这样的轮子在不查资料的情况下是做不到的,而这样的轮子当然也有人来做,koa-bodyparser就是一个造好的轮子。我们在koa中把这种轮子就叫做中间件。对于POST请求的处理,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中。

首先我们要安装中间件:

cnpm i koa-bodyparser@3 --save

然后我们就能非常轻松愉快的使用这个中间件来改造我们上面的代码了:

const Koa  = require('koa')
const app = new Koa()
const bodyParser = require('koa-bodyparser')app.use(bodyParser())app.use(async(ctx) => {if (ctx.url === '/' && ctx.method === 'GET') {let html = `<h2>This is demo2</h2><form method="POST" action="/"><p>username:</p><input name="username"><p>age:</p><input name="age"><p>website</p><input name="website"><button type="submit">submit</button>                 </form>`ctx.body = html} else if (ctx.url === '/' && ctx.method === 'POST') {let postData = ctx.request.bodyctx.body = postData} else {ctx.body = '<h2>404</h2>'}
})app.listen(3000, () => {console.log('demo2 is run')
})

 



作者:srtian
链接:https://www.jianshu.com/p/b988ce30bac3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

这篇关于Koa2初体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/509383

相关文章

Node.js初体验 Kali安装Node.js

背景:偶然看到node.js开发微信公众号的视频,有些好奇,想要接触下。然后花了两个小时在实验楼网站上在线学习了JavaScript的基础知识,以及Node.js的基础 接着本着从实践出发的原则 先去本地kali下安装个Node.js玩玩 下载地址:https://nodejs.org/en/download/ 网页最下面有提示:Note: Python 2.6 or 2.7 is requ

html初体验标准标签

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><input type="text"></body></html> 内容展示

【 OpenHarmony 4.1 Launcher 源码解析 】-- 初体验

前言 最近因为业务需要,需要做一款 UI 定制的鸿蒙 Launcher,于是就开始了「找到代码」、「研究代码」、「魔改代码」的套路流程,仅以此文章作为知识备份和技术探讨所用,也希望能给其他小伙伴提供一些源码的解析思路,方法大家各自魔改! 一、官方简介 Gitee codes:应用子系统/Launcher Launcher 作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应

通义千问AI PPT初体验:一句话、万字文档、长文本一键生成PPT!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 你有多久没有听到国内AI大模型的最新消息了? 不是国内AI领域不卷了,而是“卷”的方向变了。2023年卷

华为云 Flexus X 实例使用测评:上手初体验,比想象的更丝滑

华为云 Flexus 云服务是华为云推出的一款主打柔性算力,高效性能,高安全,高性价比的旗舰级云服务产品。主要面向金融、游戏、零售、直播等高负载业务场景,比较适合当前绝大数企业的一些云上需求。你可以根据你应用需要的性能,配置不同的规格。 上手初体验 现在,我们以一款实例配置为例,介绍华为云 Flexus X 的上手体验。 进入到华为云 Flexus 云服务的首页,点击购买按钮,进入配置页

GPT-SoVITS-WebUI 初体验

一、安装   conda create -n GPTSoVits python=3.9 #

Pyhton3+openCV3初体验

其中python3采用的anaconda进行Python的安装与库的管理。 安装好anaconda后,就可以通过anaconda来安装opencv了。打开Anaconda Prompt命令行程序,输入conda list,可以查看已安装的库。 输入conda install --channel https://conda.anaconda.org/menpo opencv3 可以对opencv

2019idea 创建springboot项目初体验

一.创建一个springboot工程 1.创建工程 2、选择Spring Initrializr 点击Next 3.设置包名,项目名,以及最后需要打包的类型,这里设置成war,点击Next 4.选择web,web,点击Next5.添加项目本地路径配置信息 6.项目已经创建完成.创建Test类,添加@RestCOntroller注解,方法上添加@GetMapping或者PostMapping等

jpa初体验

近期在做项目的时候,项目框架已定,底层都是手写的mapper,哪怕是最最简单的单表增删改,而且在接手这个项目的时候发现,前人在写这个项目的时候没有注意项目的封装性,真是想到哪里写到哪里,没有抽出公共的。于是乎这块但凡加个新的功能,就需要重新写sql,比较的麻烦,维护的时候感觉也很糟糕。     于是想到了之前在前一家公司的时候采取的做法,都是直接用的公共的,有直接使用generator直

软件工程之初体验

刚刚进入了软工视频的学习。迟迟没有写下总结。。。感觉对于软件工程还不是那么理解。现在把自己的感受写一下。 (一)软件。 视频的一开始先介绍了软件的一下基本内容。软件在我们的身边无处不在,我们对他并不陌生。 (二)软件工程过程。 定义:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。 Plan——软件规格说明。规定软件的功能及运行限制。 Do——软件开发。