如何将 nodejs 请求路由到另一个 nodejs 应用程序?
How to route nodejs requests to another nodejs application?
您好,我正在尝试构建一个非常简单的 "API-gateway" 来演示一个小规模的微服务项目。我正在使用 Nodejs 和 Express,我想编写一个非常简单的 public 面向 api 网关服务器来将请求路由到我的不同微服务。例如,假设我有微服务 A B 和 C。我希望 localhost:3000/api/A 请求转到微服务 A 和 return 结果,然后所有其他请求 localhost:3000 /api/B 转到微服务 B 和 return 结果等。我想写这个而不是使用 NGINX,有人可以帮助我了解如何实现这一目标吗? (我其他的大部分"microservices"也是nodejs/expressapis)
我能得到一个快速简单的代码示例吗?我希望看到对 google 的 GET 请求,然后客户端能够获得 GET 请求。 (使用其他库或模块也很酷!:D)
如果所有的微服务都部署在同一台机器上(不同的机器只需要多一点同步就可以知道ports/ips但这应该不是问题),你只需要使用一个公共文件来存储ops/ports 然后将调用从路由 ip:3000/api/A 重定向到 ipA:portA
您可以 运行 B 在端口 3001,C 在 3002。
然后发送 A 在端口 3000 上的所有请求。
你可以使用A中的axios之类的Http客户端来请求B或C。
示例
A.js
const express = require('express')
const axios = require('axios')
const app = express()
app.get('/api/B', (req, res) => {
axios.get('http://localhost:3001/dosomething', {
params: {...req.query, name: 'Device A'}, //Fetch datas from params
}).then(result => {
res.send(result)
})
})
app.get('/api/C', (_, res) => {
axios.get('http://localhost:3002/dosomething').then(result => {
res.send(result)
})
})
app.listen(3000, () => console.log('On 3000'))
B.js
const express = require('express')
const app = express()
app.get('/dosomething', (req, res) => {
const data = req.query
//Do something with data fetched here you know...
res.send('No worry, I will do something for ' + data.name)
})
app.listen(3001, () => console.log('On 3001'))
您好,我正在尝试构建一个非常简单的 "API-gateway" 来演示一个小规模的微服务项目。我正在使用 Nodejs 和 Express,我想编写一个非常简单的 public 面向 api 网关服务器来将请求路由到我的不同微服务。例如,假设我有微服务 A B 和 C。我希望 localhost:3000/api/A 请求转到微服务 A 和 return 结果,然后所有其他请求 localhost:3000 /api/B 转到微服务 B 和 return 结果等。我想写这个而不是使用 NGINX,有人可以帮助我了解如何实现这一目标吗? (我其他的大部分"microservices"也是nodejs/expressapis)
我能得到一个快速简单的代码示例吗?我希望看到对 google 的 GET 请求,然后客户端能够获得 GET 请求。 (使用其他库或模块也很酷!:D)
如果所有的微服务都部署在同一台机器上(不同的机器只需要多一点同步就可以知道ports/ips但这应该不是问题),你只需要使用一个公共文件来存储ops/ports 然后将调用从路由 ip:3000/api/A 重定向到 ipA:portA
您可以 运行 B 在端口 3001,C 在 3002。
然后发送 A 在端口 3000 上的所有请求。
你可以使用A中的axios之类的Http客户端来请求B或C。
示例
A.js
const express = require('express')
const axios = require('axios')
const app = express()
app.get('/api/B', (req, res) => {
axios.get('http://localhost:3001/dosomething', {
params: {...req.query, name: 'Device A'}, //Fetch datas from params
}).then(result => {
res.send(result)
})
})
app.get('/api/C', (_, res) => {
axios.get('http://localhost:3002/dosomething').then(result => {
res.send(result)
})
})
app.listen(3000, () => console.log('On 3000'))
B.js
const express = require('express')
const app = express()
app.get('/dosomething', (req, res) => {
const data = req.query
//Do something with data fetched here you know...
res.send('No worry, I will do something for ' + data.name)
})
app.listen(3001, () => console.log('On 3001'))