如何编写中间件以修改Node JS中的响应

德克斯特

我的客户给我要求加密解密所有请求响应。因此,对于所有加密的请求,我们写下了快速中间件以获取解密的请求。这很简单,但是在发送响应时,我们还必须对响应进行加密。

一种编写通用函数来加密数据并从所有路由调用该函数的方法。这是耗时的部分,因为我们在项目中有超过50条路线。所以我在考虑编写中间件,就像我们为请求所做的那样,在发送之前捕获响应,然后在对客户端发送加密响应之后对响应进行加密。

我在google中寻找解决方案,但没有任何适合我的解决方案。

routes.js

    router.post('/getUserData', verifyApiKey, async function (req, res, next) {
    let user = await getUserData();
    res.status(200).send(user)
  });

middlware.js

class EncryptDecryptRequestResponse {
    async encryptResponse(req, res, next) {
        console.log('Called encryptResponse');
        console.log('res.body', res.body);
        res.body = encryptData(res.body)
        next();
    }
}

App.js

// Middleware to decrypt request
app.use(decryptRequest);

app.use('/', indexRouter);

// Middleware to encrypt response
app.use(encryptResponse);

但是问题是我没有从中间件得到任何console.log这是我使用解决方案

EOL

我试图通过覆盖来重现您遇到的问题res.send(),但是对我来说很好。在定义路由之前,需要确保设置拦截器中间件。考虑以下简单示例:

const express = require('express');
const app = express();

function encryptResponseInterceptor(req, res, next) {
    const originalSend = res.send;

    res.send = function () {
        arguments[0] = encryptResponse(arguments[0]);
        originalSend.apply(res, arguments);
    };
    next();
}

function encryptResponse(originalData) {
    // place your encryption logic here, I'm just adding a string in this example
    return originalData + " modified";
}

// fake method that returns resolves after 1s just for testing
function getUserData() {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve();
        }, 1000)
    })
}

app.use(encryptResponseInterceptor);

app.get("/test", async (req, res, next) => {
    await getUserData();
    res.status(200).send("will be changed");
})

app.listen(3000, () => {
    console.log("server started on 3000");
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Node.js中编写中间件类

来自分类Dev

如何让中间件响应每个请求

来自分类Dev

如何为将属性添加到响应的中间件编写TypeScript定义?

来自分类Dev

Node.js中间件包装

来自分类Dev

基本的node.js中间件

来自分类Dev

如何在中间件Slim PHP框架中响应

来自分类Dev

如何从多部分表单数据中获取Node JS中间件中的请求正文?

来自分类Dev

如何修改 Django 中间件 __call__ 方法中的 response.content

来自分类Dev

node.js如何从中间件内部的redis数据库中获取数据

来自分类Dev

在Node.js / Express中连接中间件

来自分类Dev

Node js:猫鼬中间件中的Bluebird Promisify

来自分类Dev

在ExpressJS中间件中修改req.path

来自分类Dev

在Koa中编写中间件有什么意义?

来自分类Dev

使用ASP.NET Core 3中的中间件修改响应

来自分类Dev

如何在条件中间件中使用Node.js Express-session?

来自分类Dev

如何在发布路线上模拟Express / Node.js中间件?

来自分类Dev

如何在条件中间件中使用Node.js Express会话?

来自分类Dev

如何在中间件中使用 firebase 作为 node.js 的登录身份验证?

来自分类Dev

中间件格式响应

来自分类Dev

如何将中间件调用中的参数传递给中间件?

来自分类Dev

如何使用中间件向响应添加标头?

来自分类Dev

如何使中间件响应所有ajax请求

来自分类Dev

如何使中间件响应所有ajax请求

来自分类Dev

Node JS较少中间件无法自动编译

来自分类Dev

Node.js-导致404的外部中间件

来自分类Dev

用于Node.js的Passport中间件

来自分类Dev

如何将中间件路由器用于Express Node.js中的子路径

来自分类Dev

路由后的Node Express 4中间件

来自分类Dev

您如何在Phoenix框架中运行响应后的中间件功能?

Related 相关文章

热门标签

归档