Express JS代理调用webapi

Express JS proxy to call web api

我有以下代码。还有一个 web api 其中 returns 字符串数组,

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);

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

请给我推荐一个最好的 approach/solution: 我想创建一个从浏览器(应用程序)获取 url 的代理服务器,修改 url,调用新的 url 并将响应发送回浏览器(应用程序) ).

你可以让 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)
})

你可以用这样的 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)
})

更新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;
  }
}))

更新3:

代理修改响应的例子(extracted from the package docs);

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);
  }
}))