【问题标题】:How to route nodejs requests to another nodejs application?如何将nodejs请求路由到另一个nodejs应用程序?
【发布时间】:2020-06-01 06:08:13
【问题描述】:

您好,我正在尝试构建一个非常简单的“API 网关”来演示一个小型微服务项目。我正在使用 Nodejs 和 Express,我想编写一个非常简单的面向公众的 api-gateway 服务器来将请求路由到我的不同微服务。例如,假设我有微服务 AB 和 C。我希望对 localhost:3000/api/A 的请求转到微服务 A 并返回结果,然后对 localhost:3000/api/B 的所有其他请求转到微服务 B 并返回结果等。我想写这个而不是使用 NGINX,有人可以帮助我了解如何实现这一点吗? (我其他的“微服务”大部分也是nodejs/express api)

我可以在代码中获得一个简单的快速示例吗?我希望看到对 google 的 GET 请求,然后客户端能够获得 GET 请求。 (使用其他库或模块也很酷!:D)

【问题讨论】:

    标签: javascript node.js express microservices api-gateway


    【解决方案1】:

    您可以在端口 3001 上运行 B,在 3002 上运行 C。

    然后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'))
    

    【讨论】:

    • 你能帮我举个代码例子吗?感谢您将我指向 axios,我会检查一下!!!!
    • 非常感谢您的出色回答,您是否还介意我询问是否可以将请求的所有详细信息(例如正文)路由到另一个 GET 请求中
    • @nuxer 检查上面的代码块。请注意,req.query 只能从 GET 请求中获取参数,您应该使用 body-parser 包来处理 POST 请求或 PUT、PATCH 等其他请求。
    【解决方案2】:

    如果所有微服务都部署在同一台机器上(不同的机器只需要多一点同步才能知道端口/ips,但这应该不是问题),您只需使用一个通用文件来存储操作/端口,然后只需将呼叫从路由 ip:3000/api/A 重定向到 ipA:portA

    【讨论】:

    • 这是一个 github 链接(不是我的 repo,而是我不久前收藏的一个)github.com/ecojuntak/api-gateway,它是一个基本的重新路由 API 网关。应该有点用处
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多