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

这篇具有很好参考价值的文章主要介绍了82 # koa-bodyparser 中间件的使用以及实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作

安装依赖

npm init -y
npm i koa

82 # koa-bodyparser 中间件的使用以及实现,Node / Node 框架,前端工程架构,中间件,koa,koa-bodyparser

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 = `
            <form action="/login" method="post">
                用户名:<input type="text" name="username"/><br/>
                密码:<input type="password" name="password"/><br/>
                <button>提交</button>
            </form>
        `;
    } 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

82 # koa-bodyparser 中间件的使用以及实现,Node / Node 框架,前端工程架构,中间件,koa,koa-bodyparser

输入账号密码,点击提交

82 # koa-bodyparser 中间件的使用以及实现,Node / Node 框架,前端工程架构,中间件,koa,koa-bodyparser

koa-bodyparser

下面使用 koa-bodyparser 简化逻辑,安装 koa-bodyparser,https://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 = `
            <form action="/login" method="post">
                用户名:<input type="text" name="username"/><br/>
                密码:<input type="password" name="password"/><br/>
                <button>提交</button>
            </form>
        `;
    } 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-bodyparser
const bodyParser = require("./kaimo-koa-bodyparser");

启动服务,效果一样:

82 # koa-bodyparser 中间件的使用以及实现,Node / Node 框架,前端工程架构,中间件,koa,koa-bodyparser文章来源地址https://www.toymoban.com/news/detail-707752.html

到了这里,关于82 # koa-bodyparser 中间件的使用以及实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ASP.NET Core 基础知识】--中间件--内置中间件的使用

    ASP.NET Core 中包含很多内置的中间件,我们不可能对每一个内置的中间件进行一一讲解,并且中间件的使用步骤大致一样,因此本文讲解几个常用的内置中间件以及使用中间件的步骤,希望读者们可以举一反三。 一、内置中间件的介绍 1.1 静态文件中间件 在ASP.NET Core中,静态

    2024年01月17日
    浏览(40)
  • 中间件redis的使用

    Java中的中间件配置体现在springboot的yml配置文件中。Springboot框架支持微服务和中间件和restful api远程服务的调用。中间件是Java web系统的中间层的服务系统的调用接口。Springboot的自动装配和约定大于配置机制初始化springcontext的容器空间和注册组件。使用容器管理服务注册对象

    2024年02月05日
    浏览(38)
  • session中间件的使用

    npm i express-session 说明: 设置了session的名称为\\\"sid\\\",这是cookie的名称,默认值是connect.id。 设置了一个密钥\\\"forever\\\",用于对session数据进行加密和签名。 设置了两个选项:saveUninitialized和resave。saveUninitialized表示是否每次请求自动创建cookie用来存储session的id,默认值为false;resave表示是

    2024年02月16日
    浏览(33)
  • 前端中间件Midway的使用

    Midway 是阿里巴巴 - 淘宝前端架构团队,基于渐进式理念研发的 Node.js 框架,通过自研的依赖注入容器,搭配各种上层模块,组合出适用于不同场景的解决方案。 Midway 基于 TypeScript 开发,结合了面向对象(OOP + Class + IoC)与函数式(FP + Function + Hooks)两种编程范式,并在此之

    2024年02月06日
    浏览(29)
  • GoReplay中间件python版本使用

    目录 GoReplay的middlware原理 python版本环境搭建 python环境安装 gor库环境安装 python代码编写 goreplay中间件使用 中间件是一个程序,它在 STDIN 上接受请求和响应负载,并在 STDOUT 上发出修改后的请求。您可以实现任何自定义逻辑,例如剥离私有数据、高级重写、支持 oAuth 等。 中间

    2024年02月21日
    浏览(32)
  • 使用Go编写HTTP中间件

    在Go语言中,HTTP中间件是一种处理HTTP请求和响应的函数,它可以拦截到请求并对其进行处理,然后再将请求传递给下一个中间件或目标处理程序。HTTP中间件在Web应用程序中非常常见,它提供了一种机制来执行各种任务,例如身份验证、授权、日志记录和错误处理等。 下面是

    2024年01月23日
    浏览(35)
  • 【Solr】中间件-solr快速使用

    pom中添加依赖: 提供一个demo:

    2024年02月11日
    浏览(31)
  • 消息中间件Kafuka学习——初次配置使用

    MQ本质 : 例如 ActiveMQ、RabbitMQ、RocketMQ 等中间件。采用这种模型,本质就是将要推送的数据,不在存放在当前应用程序的内存中,而是将数据存放到另一个专门负责数据处理的应用程序中,从而实现服务解耦。 kafuka模型 : 如果你看不懂这些概念没关系,我会带着大家一起梳理

    2023年04月10日
    浏览(28)
  • 关于Django的中间件使用说明。

    中间件的大概解释:在浏览器在请求服务器的时候,首先要经过各种中间件,然后进行GET、POST等请求的访问,然后处理数据,最后经过各种中间件输出给浏览器。 我们可以利用中间件的特性,来解决用户登录过程中的繁琐问题。 在我们用django写后端服务的时候,需要很多

    2024年02月19日
    浏览(33)
  • springcloud中间件:sentinel的简单使用

    Sentinel 是面向分布式服务架构的 高可用流量防护组件 ,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 避免大批量的瞬时请求都打到服务上,将服务压垮。 Sentinel 具有以下 特征 : 丰富的应用场

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包