返回顶部
首页 > 资讯 > 数据库 >82 # koa-bodyparser 中间件的使用以及实现
  • 342
分享到

82 # koa-bodyparser 中间件的使用以及实现

中间件koakoa-bodyparser 2023-09-12 07:09:23 342人浏览 安东尼
摘要

准备工作 安装依赖 npm init -ynpm i koa koa 文档:https://koajs.cn/ koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成 a

准备工作

安装依赖

npm init -ynpm i koa

在这里插入图片描述

koa 文档:https://koajs.cn/

koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成

app.use(async (ctx, next) => {    console.log(ctx.path, ctx.method);    if (ctx.path == "/login" && ctx.method === "POST") {        const arr = [];        ctx.req.on("data", function (chunk) {            arr.push(chunk);        });        ctx.req.on("end", function () {            const result = Buffer.concat(arr).toString();            console.log("result---->", result);            ctx.body = result;        });    } else {        next();    }});

koa 中所有的异步都必须是 promise,只有 promise 才有等待效果,必须所有的 next 方法前需要有 await、return 否则没有等待效果

app.use(async (ctx, next) => {    console.log(ctx.path, ctx.method);    if (ctx.path == "/login" && ctx.method === "POST") {        await new Promise((resolve, reject) => {            const arr = [];            ctx.req.on("data", function (chunk) {                arr.push(chunk);            });            ctx.req.on("end", function () {                const result = Buffer.concat(arr).toString();                console.log("result---->", result);                ctx.body = result;                resolve();            });        });    } else {        await next();    }});

实现一个表单提交功能 server.js

const Koa = require("koa");const app = new Koa();app.use((ctx, next) => {    // 路径是 /login get 方式    // ctx 包含了 request response req res    console.log(ctx.path, ctx.method);    if (ctx.path == "/login" && ctx.method === "GET") {        ctx.body = `            
用户名:
密码:
`
; } else { return next(); }});app.use(async (ctx, next) => { console.log(ctx.path, ctx.method); if (ctx.path == "/login" && ctx.method === "POST") { await new Promise((resolve, reject) => { const arr = []; ctx.req.on("data", function (chunk) { arr.push(chunk); }); ctx.req.on("end", function () { const result = Buffer.concat(arr).toString(); console.log("result---->", result); ctx.body = result; resolve(); }); }); } else { await next(); }});app.on("error", function (err) { console.log("error----->", err);});app.listen(3000);

启动服务,访问 Http://localhost:3000/login

nodemon server.js

在这里插入图片描述

输入账号密码,点击提交

在这里插入图片描述

koa-bodyparser

下面使用 koa-bodyparser 简化逻辑,安装 koa-bodyparserhttps://www.npmjs.com/package/koa-bodyparser

npm i koa-bodyparser

用法:

const Koa = require('koa');const bodyParser = require('koa-bodyparser');const app = new Koa();app.use(bodyParser());app.use(async ctx => {  // the parsed body will store in ctx.request.body  // if nothing was parsed, body will be an empty object {}  ctx.body = ctx.request.body;});

业务里添加逻辑

const Koa = require("koa");const bodyParser = require("koa-bodyparser");const app = new Koa();app.use(bodyParser());app.use((ctx, next) => {    // 路径是 /login get 方式    // ctx 包含了 request response req res    console.log(ctx.path, ctx.method);    if (ctx.path == "/login" && ctx.method === "GET") {        ctx.body = `            
用户名:
密码:
`
; } else { return next(); }});app.use(async (ctx, next) => { console.log(ctx.path, ctx.method); if (ctx.path == "/login" && ctx.method === "POST") { ctx.body = ctx.request.body; } else { await next(); }});app.on("error", function (err) { console.log("error----->", err);});app.listen(3000);

效果也是一样的

下面自己实现 koa-bodyparser

const querystring = require("querystring");console.log("使用的是 kaimo-koa-bodyparser 中间件");// 中间件的功能可以扩展属性、方法module.exports = function () {    return async (ctx, next) => {        await new Promise((resolve, reject) => {            const arr = [];            ctx.req.on("data", function (chunk) {                arr.push(chunk);            });            ctx.req.on("end", function () {                if (ctx.get("content-type") === "application/x-www-fORM-urlencoded") {                    const result = Buffer.concat(arr).toString();                    console.log("kaimo-koa-bodyparser-result---->", result);                    ctx.request.body = querystring.parse(result);                }                resolve();            });        });        await next(); // 完成后需要继续向下执行    };};

将业务代码的引用自己实现的

// 使用自己实现的 koa-bodyparserconst bodyParser = require("./kaimo-koa-bodyparser");

启动服务,效果一样:

在这里插入图片描述

来源地址:https://blog.csdn.net/kaimo313/article/details/132812456

您可能感兴趣的文档:

--结束END--

本文标题: 82 # koa-bodyparser 中间件的使用以及实现

本文链接: https://lsjlt.com/news/404137.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 82 # koa-bodyparser 中间件的使用以及实现
    准备工作 安装依赖 npm init -ynpm i koa koa 文档:https://koajs.cn/ koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成 a...
    99+
    2023-09-12
    中间件 koa koa-bodyparser
  • koa中bodyparser的使用方法是什么
    在 Koa 中使用 bodyparser 中间件可以帮助解析请求体中的数据,并将其存储到 ctx.request.body 中,以便...
    99+
    2024-04-03
    koa bodyparser
  • koa中间件的实现原理如何
    这篇文章将为大家详细讲解有关koa中间件的实现原理如何,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   koa的执行顺序是这样的:   const middlewa...
    99+
    2024-04-02
  • 实现redux, koa, express中间件的示例分析
    小编给大家分享一下实现redux, koa, express中间件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果你...
    99+
    2024-04-02
  • koa-compose简单实现及使用的妙处
    目录场景koa-compose实现场景 今年的行情真的是非常的差,而且面试的时候卷的不行。前段时间,有个朋友去面了某大厂,竟然被问到了手写一个koa-compose。那咱们今天就简...
    99+
    2023-05-15
    koa-compose koa-compose简单实现
  • Node.js网络框架koa compose中间件如何使用
    这篇文章主要介绍了Node.js网络框架koa compose中间件如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node.js网络框架koa compose中间件如何使用文章都会有...
    99+
    2023-07-04
  • koa-compose简单实现及使用的方法是什么
    这篇“koa-compose简单实现及使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“koa-compose简...
    99+
    2023-07-06
  • 前端使用koa实现大文件分片上传
    目录引言前端拆分上传的文件流后端接收文件片段合并文件片段总结引言 一个文件资源服务器,很多时候需要保存的不只是图片,文本之类的体积相对较小的文件,有时候,也会需要保存音视频之类的大文...
    99+
    2024-04-02
  • 浅析node中间件及实现一个简单的node中间件
    目录一、是什么二、封装token校验日志模块koa-bodyparserkoa-static三、总结一、是什么 中间件(Middleware)是介于应用系统和系统软件之间的一类软件,...
    99+
    2024-04-02
  • C++中memcpy函数的使用以及模拟实现
    目录前言一、什么是memcpy二、memcpy与strcpy的区别1.strcpy2.memcpy三、模拟实现memcpy总结前言 memcpy函数如何使用,以及如何实现我们自己的m...
    99+
    2024-04-02
  • Android中使用AsyncTask实现文件下载以及进度更新提示
    Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对Handler来说AsyncTask更轻量级一些,适用于简单的异...
    99+
    2022-06-06
    更新 asynctask Android
  • ThinkPHP6使用JWT+中间件实现Token验证
    目录 前言 一、JWT介绍 二、使用composer安装JWT扩展包  三、在ThinkPHP6中直接使用JWT生成验证Token(简单粗暴) (一)代码文件 (二)请求接口测试 四、在ThinkPHP6中使用JWT+中间件生成验证Tok...
    99+
    2023-09-01
    php 开发语言
  • node.js使用express-fileupload中间件实现文件上传
    目录初始化项目 编写服务器 初始化客户端 编写组件 FileUpload Message.js Progress.js 测试 本文使用express作为服务端,使用express-f...
    99+
    2024-04-02
  • Linux中rm命令使用以及C/C++代码实现
    目录前言Linux rm 命令如何使用 rm 命令删除文件如何强制 rm 忽略不存在的文件如何在每次删除之前使 rm 提示如何使用 rm 命令删除目录如何让 rm 只删除空目录如何强...
    99+
    2024-04-02
  • Android MediaPlay的使用以及实现音频播放器
    一、MediaPlay状态机详解(MediaPlay的生命周期) MediaPlayer状态机如下图所示 ...
    99+
    2022-06-06
    Android
  • 浅谈express 中间件机制及实现原理
    简介 中间件机制可以让我们在一个给定的流程中添加一个处理步骤,从而对这个流程的输入或者输出产生影响,或者产生一些中作用、状态,或者拦截这个流程。中间件机制和tomcat的过滤器类似,这两者都属于责任链模式...
    99+
    2022-06-04
    浅谈 中间件 原理
  • 使用Broadcast实现Android组件间的通信
    Android组件之间的通信有多种实现方式,Broadcast就是其中一种。在activity和fragment之间的通信,broadcast用的更多本文以一个activity...
    99+
    2022-06-06
    通信 Android
  • vue中iframe使用以及结合postMessage实现跨域通信
    目录使用场景需求iframe使用基本使用常用属性iframe高度自适应获取iframe的内容同域下获取父级/子级内容iframe跨域postMessage通信在vue中使用使用场景 ...
    99+
    2024-04-02
  • Django中间件的使用
    中间件(middleware) 中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应可以通过中间件,也就是说中间件可以处理request和resp...
    99+
    2023-01-30
    中间件 Django
  • vue3组件中v-model的使用以及深入讲解
    目录v-model input中使用双向绑定数据 组件中的v-model 其他写法 总结v-model input中使用双向绑定数据 v-model在vue中我们经常用它与inpu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作