【发布时间】:2020-05-26 13:54:32
【问题描述】:
假设我想为微服务实现 API 网关。我在网关中有这种类型的路由:
app.all('/api/users-service/*', (req, res, next) => {
});
我想做的是在不知道GET、POST 或其他东西的情况下将req 转发给服务。我还可能需要构建两个不同的请求,将它们转发到两个不同的服务并在网关中返回合并的响应。类似的东西:
app.all('/api/users-service/*', (req, res, next) => {
const user = await request(req, 'http://first-service/api/user/' + req.body.userId);
const products = await request(req, 'http://second-service/api/products');
res.status(200).json({
user: user,
products: products
});
});
我知道这是一个不好的例子,但希望你能理解我想要做什么。
【问题讨论】:
-
我想弄清楚如何转发请求,最好的方法是什么,我应该使用什么 npm 包?如何使用它?这样我就可以使用给定的请求并创建另一个或多个请求。
-
您将
req传递给的函数,接受什么?request模块不能那样工作。 -
我知道,我只是想解释一下我想要实现的目标
-
您必须手动为来自
req对象的请求构建请求选项。 -
您正在寻找的术语是“代理”。您可以获得只需要配置的预制代理服务器(例如 nginx),或者您可以获得可以在 node.js 中使用的模块,您可以在 node.js 代码中配置和启用这些模块。只需在 NPM 中搜索“代理”,您就会在那里找到很多模块。或者,您可以构建自己的,这将涉及检查传入请求,设置匹配的传出请求,然后将响应通过管道返回给发起者。
标签: javascript node.js api proxy microservices