在策略中访问 req.body 的最佳方式

best way to access req.body in policy

我目前正在开发一个实现 oauth 解决方案的自定义插件。我决定实施一项适当的政策,将传入的登录 post 转发到外部服务。因此,我必须访问请求的主体 (属性 req.body),这只有在所需的主体解析器作为 express - 中间件启用时才有可能。不幸的是,我找不到在网关应用程序中启用正文解析的舒适方法。因此,我通过注册一个正确的路由来访问底层的 expressapp 对象来解决这个问题。

 pluginContext.registerGatewayRoute(app => { app.use(express.json()); }

我不想通过简单地注册路由来替换策略,因为我没有找到将其他策略(例如:CORS、RATE LIMITER...)应用到该路由的方法。

如果我监督了一些事情并且有更简单的方法来启用正文解析,请告诉我。

是的,使用 "registerGatewayRoute" 会将中间件应用于 EG 中的每个路由。您可以做的是创建一个主体解析器策略。 EG 中的策略只是 ExpressJS 中间件的包装器,所以

因此正文解析器策略可以包含类似

的代码
{
   name: 'bodyparser',
   policy: (actionParams) => express.json()
}

https://www.express-gateway.io/docs/plugins/policy-development/

现在只需将此策略添加为管道中的第一个策略,它应该为通过该管道的所有路由提供 req.body

非常感谢您的有用回答。按照建议,我创建了一个 bodyParser 策略。只需要对先前的答案进行少量修改:我不得不调用函数 express.json() 而不是 express.json 以获得所需的中间件功能。

const express = require('express');
module.exports = {
   name: 'bodyParser',
   policy: (actionParams) => express.json()
};

现在工作正常,正文解析仅在真正需要时启用。