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);
}
}))
我有以下代码。还有一个 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);
}
}))