访问策略中的请求主体的最佳方法

时间:2018-11-03 14:53:19

标签: express-gateway

我目前正在开发实现oauth解决方案的自定义插件。我决定实施适当的策略,将传入的登录帖子转发到外部服务。因此,我必须访问请求的主体(属性req.body),这仅在将所需的主体解析器启用为express-中间件时才可行。不幸的是,我找不到在网关应用程序中启用正文解析的简便方法。因此,我通过注册正确的路由来访问基础的expressapp对象,从而解决了该问题。

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

我不想仅通过注册路由来替代策略,因为我没有找到将其他策略(例如:CORS,RATE LIMITER ...)应用于此路由的方法。

请让我知道是否我监督了某些事情,并且有一种更简单的方法可以启用正文解析。

2 个答案:

答案 0 :(得分:1)

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

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

之类的代码
{{1}}

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

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

答案 1 :(得分:1)

非常感谢您的帮助。如建议的那样,我创建了一个bodyParser策略。只需对先前的答案进行一小部分修改:代替express.json,我必须调用函数express.json()以获得所需的中间件功能。

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

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