Nuxt:使用 NuxtJS 服务器中间件修改来自代理服务器的响应
Nuxt: modify a response from a proxied server using NuxtJS server middleware
我正在使用 NuxtJS server middleware as a proxy pass as described in this article
将传入请求代理到内部服务以避免跨域问题。
const httpProxy = require('http-proxy')
const proxy = httpProxy.createProxyServer()
const API_URL = 'https://api.mydomain.com'
export default function(req, res, next) {
proxy.web(req, res, {
target: API_URL
})
}
我如何分析代理服务器的响应并可能在此级别对其进行修改?
我在 http-proxy documentation 中找到了一个示例。
要修改响应,必须将 selfHandleResponse 设置为 true。
这是文档中的示例:
var option = {
target: target,
selfHandleResponse : true
};
proxy.on('proxyRes', function (proxyRes, req, res) {
var body = [];
proxyRes.on('data', function (chunk) {
body.push(chunk);
});
proxyRes.on('end', function () {
body = Buffer.concat(body).toString();
console.log("res from proxied server:", body);
res.end("my response to cli");
});
});
proxy.web(req, res, option);
下面的代码允许我在请求匹配某个 url 时处理代理答案,否则就转发(管道)它。
proxy.once('proxyRes', function(proxyRes, req, res) {
if (!req.originalUrl.includes('api/endpoint')) {
res.writeHead(proxyRes.statusCode) // had to reset header, otherwise always replied proxied answer with HTTP 200
proxyRes.pipe(res)
} else {
// modify response
let body = []
proxyRes.on('data', function(chunk) {
body.push(chunk)
})
proxyRes.on('end', function() {
body = Buffer.concat(body).toString()
console.log('res from proxied server:', body)
res.end('my response to cli')
})
}
})
注意我添加了用 once()
替换 .on()
以使其工作。
我正在使用 NuxtJS server middleware as a proxy pass as described in this article 将传入请求代理到内部服务以避免跨域问题。
const httpProxy = require('http-proxy')
const proxy = httpProxy.createProxyServer()
const API_URL = 'https://api.mydomain.com'
export default function(req, res, next) {
proxy.web(req, res, {
target: API_URL
})
}
我如何分析代理服务器的响应并可能在此级别对其进行修改?
我在 http-proxy documentation 中找到了一个示例。 要修改响应,必须将 selfHandleResponse 设置为 true。 这是文档中的示例:
var option = {
target: target,
selfHandleResponse : true
};
proxy.on('proxyRes', function (proxyRes, req, res) {
var body = [];
proxyRes.on('data', function (chunk) {
body.push(chunk);
});
proxyRes.on('end', function () {
body = Buffer.concat(body).toString();
console.log("res from proxied server:", body);
res.end("my response to cli");
});
});
proxy.web(req, res, option);
下面的代码允许我在请求匹配某个 url 时处理代理答案,否则就转发(管道)它。
proxy.once('proxyRes', function(proxyRes, req, res) {
if (!req.originalUrl.includes('api/endpoint')) {
res.writeHead(proxyRes.statusCode) // had to reset header, otherwise always replied proxied answer with HTTP 200
proxyRes.pipe(res)
} else {
// modify response
let body = []
proxyRes.on('data', function(chunk) {
body.push(chunk)
})
proxyRes.on('end', function() {
body = Buffer.concat(body).toString()
console.log('res from proxied server:', body)
res.end('my response to cli')
})
}
})
注意我添加了用 once()
替换 .on()
以使其工作。