Как отправить данные с первого сервера на другой и получить ответ другого сервера на первом сервере в nodejs? - PullRequest
0 голосов
/ 29 октября 2018

Я хочу сделать запрос или вызов API на сервере 1, затем этот сервер автоматически запросит сервер 2 и отправит ответ обратно на сервер 1. Я использую NodeJs и Express.

Пример:

app.post('/api/Is', function(req, response, callback) {

})

Я называю этот API в postmain как: http://localhost:3000//api/Is

Таким образом, он должен автоматически перейти на http://localhost:5000//api/Is и отправить ответ обратно на http://localhost:3000//api/Is вызов. Я должен только позвонить http://localhost:3000//api/Is, и в бэкэнд-коде он примет тело запроса и передаст его на http://localhost:5000//api/Is и отправит ответ обратно на http://localhost:3000//api/Is

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я думаю, вы можете использовать прокси-библиотеку, например, «node-http-proxy», самый простой способ.

в противном случае вы должны передать запрос и ответ, используя 'http moudle', например так (без отладки, не уверен, что он будет работать идеально ~):

const http = require('http');
app.post('/api/Is', function(req, response, callback) {
const options = {
    host:'localhost',
    port:'5000',
    path:'/api/Is',
    method: 'POST'
    // maybe need pass 'headers'?
};

let proxyBody = '';
const req2 = http.request(options, function(res2) {
    res2.on('data',function(chunk){
        proxyBody += chunk;
    }).on('end', function(){
        // here can feedback the result to client, like:
        // const { headers } = res2;
        // response.send(proxyBody)
    });
});
// .on('error'){}  here handle the error response

req2.end();
});
0 голосов
/ 29 октября 2018

вам нужно использовать любую библиотеку для вызова API с server1 на server2. код ниже я использую библиотеку выборки.

Для установки библиотеки извлечения

npm install node-fetch --save

       
       
        //SERVER1//

const fetch = require('node-fetch');

router.get("/api/Is", async (req, res) => {
  try{
    let {success, data} = await getDataFromServer2(req);
    if(success) return res.send({success: true, data: data})
    res.send({success: false})
  }catch(e){
    res.send({success: false})
  }
});

function getDataFromServer2(req){
  return fetch('http://localhost:5000//api/Is', { 
    method: 'post',
    body:    req,
    headers: { 'Content-Type': 'application/json' },
  }).then(res => res.json())
    .then((response)=>{
      return {
       success: true,
       data: response
      }
    }).catch((error) => {
      throw new Error("unable to fetch the roles ")
    })
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...