广告
返回顶部
首页 > 资讯 > 数据库 >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://www.lsjlt.com/news/404137.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 82 # koa-bodyparser 中间件的使用以及实现
    准备工作 安装依赖 npm init -ynpm i koa koa 文档:https://koajs.cn/ koa 中不能用回调的方式来实现,因为 async 函数执行的时候不会等待回调完成 a...
    99+
    2023-09-12
    中间件 koa koa-bodyparser
  • koa中间件的实现原理如何
    这篇文章将为大家详细讲解有关koa中间件的实现原理如何,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   koa的执行顺序是这样的:   const middlewa...
    99+
    2022-10-19
  • 实现redux, koa, express中间件的示例分析
    小编给大家分享一下实现redux, koa, express中间件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果你...
    99+
    2022-10-19
  • koa-compose简单实现及使用的妙处
    目录场景koa-compose实现场景 今年的行情真的是非常的差,而且面试的时候卷的不行。前段时间,有个朋友去面了某大厂,竟然被问到了手写一个koa-compose。那咱们今天就简...
    99+
    2023-05-15
    koa-compose koa-compose简单实现
  • koa-compose简单实现及使用的方法是什么
    这篇“koa-compose简单实现及使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“koa-compose简...
    99+
    2023-07-06
  • 浅析node中间件及实现一个简单的node中间件
    目录一、是什么二、封装token校验日志模块koa-bodyparserkoa-static三、总结一、是什么 中间件(Middleware)是介于应用系统和系统软件之间的一类软件,...
    99+
    2022-11-13
  • C++中memcpy函数的使用以及模拟实现
    目录前言一、什么是memcpy二、memcpy与strcpy的区别1.strcpy2.memcpy三、模拟实现memcpy总结前言 memcpy函数如何使用,以及如何实现我们自己的m...
    99+
    2022-11-13
  • Android中使用AsyncTask实现文件下载以及进度更新提示
    Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对Handler来说AsyncTask更轻量级一些,适用于简单的异...
    99+
    2022-06-06
    更新 asynctask Android
  • node.js使用express-fileupload中间件实现文件上传
    目录初始化项目 编写服务器 初始化客户端 编写组件 FileUpload Message.js Progress.js 测试 本文使用express作为服务端,使用express-f...
    99+
    2022-11-12
  • ThinkPHP6使用JWT+中间件实现Token验证
    目录 前言 一、JWT介绍 二、使用composer安装JWT扩展包  三、在ThinkPHP6中直接使用JWT生成验证Token(简单粗暴) (一)代码文件 (二)请求接口测试 四、在ThinkPHP6中使用JWT+中间件生成验证Tok...
    99+
    2023-09-01
    php 开发语言
  • Linux中rm命令使用以及C/C++代码实现
    目录前言Linux rm 命令如何使用 rm 命令删除文件如何强制 rm 忽略不存在的文件如何在每次删除之前使 rm 提示如何使用 rm 命令删除目录如何让 rm 只删除空目录如何强...
    99+
    2022-11-13
  • Android MediaPlay的使用以及实现音频播放器
    一、MediaPlay状态机详解(MediaPlay的生命周期) MediaPlayer状态机如下图所示 ...
    99+
    2022-06-06
    Android
  • 使用Broadcast实现Android组件间的通信
    Android组件之间的通信有多种实现方式,Broadcast就是其中一种。在activity和fragment之间的通信,broadcast用的更多本文以一个activity...
    99+
    2022-06-06
    通信 Android
  • vue3组件中v-model的使用以及深入讲解
    目录v-model input中使用双向绑定数据 组件中的v-model 其他写法 总结v-model input中使用双向绑定数据 v-model在vue中我们经常用它与inpu...
    99+
    2022-11-12
  • node.js如何使用express-fileupload中间件实现文件上传
    本篇内容介绍了“node.js如何使用express-fileupload中间件实现文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目...
    99+
    2023-06-20
  • node.js怎么使用express-fileupload中间件实现文件上传
    本篇内容介绍了“node.js怎么使用express-fileupload中间件实现文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本...
    99+
    2023-06-17
  • vue中iframe使用以及结合postMessage实现跨域通信
    目录使用场景需求iframe使用基本使用常用属性iframe高度自适应获取iframe的内容同域下获取父级/子级内容iframe跨域postMessage通信在vue中使用使用场景 ...
    99+
    2022-11-13
  • vue中怎么使用eventbus实现组件间传值
    这期内容当中小编将会给大家带来有关vue中怎么使用eventbus实现组件间传值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。当然,使用存储也是可以得,但是并非一定要缓存...
    99+
    2022-10-19
  • JavaScript中String对象的使用方法以及实例
    方法总览: 实例(js中字符串和字符串对象之间能够自由转换,字符串可以直接使用字符串对象的方法和属性):  var ss="孙士彬倪炜豪汤键倪炜豪"; documen...
    99+
    2022-11-13
  • 怎么使用Flutter实现日期时间选择类控件及国际化
    本篇内容介绍了“怎么使用Flutter实现日期时间选择类控件及国际化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!注意:无特殊说明,Flut...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作