我目前正在开发实现oauth解决方案的自定义插件。我决定实施适当的策略,将传入的登录帖子转发到外部服务。因此,我必须访问请求的主体(属性req.body),这仅在将所需的主体解析器启用为express-中间件时才可行。不幸的是,我找不到在网关应用程序中启用正文解析的简便方法。因此,我通过注册正确的路由来访问基础的expressapp对象,从而解决了该问题。
pluginContext.registerGatewayRoute(app => { app.use(express.json()); }
我不想仅通过注册路由来替代策略,因为我没有找到将其他策略(例如:CORS,RATE LIMITER ...)应用于此路由的方法。
请让我知道是否我监督了某些事情,并且有一种更简单的方法可以启用正文解析。
答案 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()
};
现在工作正常,仅在真正需要的地方启用正文解析。