Как перенаправить nodejs запросов в другое nodejs приложение? - PullRequest
1 голос
/ 17 февраля 2020

Привет. Я пытаюсь создать действительно простой «API-шлюз» для демонстрации небольшого микросервисного проекта. Я использую Nodejs и Express, и я хотел написать действительно простой сервер api-gateway, обращенный к publi c, для маршрутизации запросов на разные микросервисы. Например, допустим, у меня есть микросервис AB и C. Я хотел запросы к localhost: 3000 / api / A на go к микросервису A и вернуть результат, а затем все остальные запросы к localhost: 3000 / api / B go к микросервису B и вернуть результат ect. Я хотел написать это вместо использования NGINX, может кто-нибудь помочь мне понять, как я могу добиться этого? (Большинство других моих «микросервисов» также являются nodejs / express apis)

Могу ли я получить простой простой пример кода? Я хотел бы видеть запрос GET для Google, а затем клиент сможет получить запрос GET. (использование других библиотек или модулей тоже было бы круто!: D)

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете запустить B на порту 3001, C на 3002.

Затем отправить все запросы по A на порт 3000.

Вы можете использовать Http-клиент, например, ax ios in A по запросу 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'))
0 голосов
/ 17 февраля 2020

Если все микро-сервисы развернуты на одной машине (разные машины просто нуждаются в большей синхронизации для определения портов / ips, но это не должно быть проблемой), вы просто используете общий файл для хранения операций / портов, а затем просто перенаправьте вызовы с маршрута ip: 3000 / api / A на ipA: portA

...