1

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

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

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

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

4

2 回答 2

1

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

所以正文解析器策略可以包含类似的代码

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

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

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

于 2018-11-03T20:23:15.710 回答
1

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

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

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

于 2018-11-04T08:54:27.177 回答