如何将请求转发到node.js中的其他端点

mji*_*cua 11 node.js

在我的场景中,我需要转发请求到另一个终点.在我的机器上有两个服务器php和node.js服务器.Node.js就像一个"中间人",PHP服务器必须以同样的方式工作.

Node.js服务器代码

var express = require('express');
var fs = require('fs');
var path = require('path');
var http = require('http');
var https = require('https');
var app = express();

var HTTP_PORT = 3000;

// Create an HTTP service
http.createServer(app).listen(HTTP_PORT,function() {
  console.log('Listening HTTP on port ' + HTTP_PORT);
});


//endpoint for tracking
app.get('/track', function(req, res) {

  sendRequestToOtherEndPoint(req);

  processRequest(req);
  res.setHeader('Content-Type', 'application/json');
  res.send('Req OK');
});

function processRequest(req){
    console.log("request processed");
}

function sendRequestToOtherEndPoint(req){
    //magic here :)
}
Run Code Online (Sandbox Code Playgroud)

当此服务器在端口3000中收到get请求时,它处理请求信息,并且必须将相同的请求转发到另一个端点.

例如:

  1. 获取localhost:3000/track?param1 = 1¶m2 = 2
  2. 服务器进程获取请求
  3. 服务器转发请求到localhost/final-endpoint?param1 = 1¶m2 = 2

kma*_*dov 12

根据您要执行的操作,您可以为终点创建新请求:

//endpoint for tracking
app.get('/track', function(req, res) {

  req.get({url: 'http://end-point', headers: req.headers});

  processRequest(req);
  res.setHeader('Content-Type', 'application/json');
  res.send('Req OK');
});
Run Code Online (Sandbox Code Playgroud)

更多信息:https://github.com/request/request

  • 根据文档http://expressjs.com/en/5x/api.html#req.get,这不是“get”方法所做的 (2认同)

Pra*_*ani 9

有几个有用的库可以使用:

http-proxy-middleware

const proxy = require('http-proxy-middleware')
var apiProxy = proxy('/track', {target: 'http://end-point'});
app.use(apiProxy)
Run Code Online (Sandbox Code Playgroud)

axios-express-proxy

import express from 'express';
import { Proxy } from 'axios-express-proxy';
const app = express();
const port = 3000;

app.get('/track', (req, res) => Proxy('http://end-point', req, res));
Run Code Online (Sandbox Code Playgroud)