Express JS 代理调用 web api

Dot*_*Dev 5 proxy-server node.js express

我有以下代码。还有一个返回字符串数组的 web api,

const express = require('express');
const proxy = require('express-http-proxy');


var app = express();

app.use('/proxy', proxy('http://localhost:56660/api/values'));

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

当我尝试执行 localhost:3000/proxy 时,我没有得到响应,但是当我使用 时app.use('/proxy', proxy('www.google.com'));,它会重定向到 google 网站。

请给我建议一个最佳方法/解决方案: 我想创建一个代理服务器,它从浏览器(应用程序)获取 url,修改 url,调用新 url 并将响应发送回浏览器(应用程序)。

Mig*_*rón 4

您可以获取要代理的 URL 作为查询参数,修改它,然后将该 URL 传递给proxy,如下所示(使用而不是app.use('/proxy', proxy('http://localhost:56660/api/values'));):

app.get('/proxy', (req, res, next) => {
    const modifiedURL = modifyURL(req.query.url)
    return proxy(modifiedURL)(req, res, next)
})
Run Code Online (Sandbox Code Playgroud)

您可以使用如下 URL 调用服务器(GET 方法):

https://my.server.com/proxy?url=https://urltobeproxied.com

更新:

我认为这可以根据您的需求工作:

app.use('/proxy', (req, res, next) => {
    const requestedUrl = `${req.protocol}://${req.get('Host')}${req.url}`
    const modifiedURL = modifyURL(requestedUrl)
    proxy(modifiedURL)(req, res, next)
})
Run Code Online (Sandbox Code Playgroud)

更新2:

app.use('/proxy', proxy('http://localhost:56660/api/values', {
  proxyReqPathResolver: function(req) {
    const requestedUrl = `${req.protocol}://${req.get('Host')}${req.url}`
    const modifiedURL = modifyURL(requestedUrl)
    return require('url').parse(modifiedURL).path;
  }
}))
Run Code Online (Sandbox Code Playgroud)

更新3:

代理修改响应的示例(从包文档中提取);

app.use('/proxy', proxy('http://localhost:56660/api/values', {
  userResDecorator: function(proxyRes, proxyResData, userReq, userRes) {
    data = JSON.parse(proxyResData.toString('utf8'));
    data.newProperty = 'exciting data';
    return JSON.stringify(data);
  }
}))
Run Code Online (Sandbox Code Playgroud)