Javascript 如何将nodejs请求路由到另一个nodejs应用程序?

Javascript 如何将nodejs请求路由到另一个nodejs应用程序?,javascript,node.js,express,microservices,api-gateway,Javascript,Node.js,Express,Microservices,Api Gateway,嗨,我正在尝试构建一个非常简单的“API网关”,以演示一个小规模的微服务项目。我正在使用Nodejs和Express,我想编写一个非常简单的面向公众的api网关服务器,将请求路由到不同的微服务。例如,假设我有microservice A B和C。我希望对localhost:3000/api/A的请求转到microservice A并返回结果,然后对localhost:3000/api/B的所有其他请求转到microservice B并返回结果等。我想写这篇文章而不是使用NGINX,有人能帮我理解

嗨,我正在尝试构建一个非常简单的“API网关”,以演示一个小规模的微服务项目。我正在使用Nodejs和Express,我想编写一个非常简单的面向公众的api网关服务器,将请求路由到不同的微服务。例如,假设我有microservice A B和C。我希望对localhost:3000/api/A的请求转到microservice A并返回结果,然后对localhost:3000/api/B的所有其他请求转到microservice B并返回结果等。我想写这篇文章而不是使用NGINX,有人能帮我理解我是如何做到这一点的吗?(我的大多数其他“微服务”也是nodejs/expressapi)


我能得到一个简单的代码示例吗?我希望看到一个GET请求到谷歌,然后客户端能够得到GET请求。(使用其他库或模块也会很酷!:D)

如果所有微服务都部署在同一台机器上(不同的机器只需要更多的同步来了解端口/IP,但这不应该是问题),您只需使用一个公共文件来存储ops/端口,然后将调用从路由ip:3000/api/a重定向到ipA:portA即可。您可以在端口3001上运行B,在3002上运行C

然后,通过端口3000上的

您可以在A中使用Http客户端(如axios)来请求B或C

例子 A.js

const express=require('express'))
常量axios=require('axios')
const app=express()
app.get('/api/B',(req,res)=>{
axios.get()http://localhost:3001/dosomething', {
params:{…req.query,名称:'设备A'},//从params获取数据
})。然后(结果=>{
res.send(结果)
})
})
app.get('/api/C',(\uRes)=>{
axios.get()http://localhost:3002/dosomething)。然后(结果=>{
res.send(结果)
})
})
app.listen(3000,()=>console.log('On 3000'))
B.js

const express=require('express'))
const app=express()
app.get('/dosomething',(请求,res)=>{
const data=req.query
//对这里获取的数据做点什么你知道。。。
res.send('不用担心,我会为'+data.name'做些事情)
})
app.listen(3001,()=>console.log('On 3001'))

你能帮我举一个代码示例吗?谢谢你给我指点axios我会查出来的!!!!非常感谢您提供了一个很好的答案,您介意我问一下,是否可以将请求的所有细节(如尸体)发送到另一个GETrequest@nuxer检查上面的代码块。请注意,req.query只能从GET请求中获取参数,您应该使用body parser包来处理POST请求或其他请求,如PUT、PATCH等。这是一个github链接(不是我的repo,而是我不久前添加书签的链接),它是一个基本的重新路由api网关。应该有点用