在策略中访问 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()
};
现在工作正常,正文解析仅在真正需要时启用。
我目前正在开发一个实现 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()
};
现在工作正常,正文解析仅在真正需要时启用。