Node.js http-proxy: 错误响应未发送到客户端
Node.js http-proxy: Error response not sent to client
我正在使用 proxy.web 转发客户请求。
当目标服务器启动时,我的代码按预期工作。
当目标服务器关闭时,ECONNREFUSED 错误被捕获并打印到 console.log。我想将该错误发送回客户端,并尝试使用此处提供的示例。不幸的是,错误响应没有到达客户端(尝试了 chrome 和 firefox)。请找到下面的代码。为什么响应没有发送到客户端?
var proxyServer = http.createServer(function(req, res) {
if(req.path === 'forbidden') {
return res.end('nope');
}
var url_parts = url.parse(req.url);
var extname = path.extname(url_parts.pathname);
if (extname || url_parts.pathname.length <= 1){
proxy.web(req, res, {
target: 'http://localhost:'+config.fileServer.port
});
}
else{
proxy.web(req, res, {
target: config.recognitionServer.url
}, function(e) {
console.log(e.message);
if (!res.headersSent) {
res.writeHead(500, { 'content-type': 'application/json' });
}
res.end(JSON.stringify({ error: 'proxy_error',
reason: e.message
}));
});
}
}).listen(config.proxyServer.port, function () {
console.log('Proxy server is listening on port '
+ config.proxyServer.port);
});
一个好的方法是:
return res.status(500).send({
error: true,
message: 'your-error-message'
});
您重写的代码:
proxy.web(req, res, {
target: config.recognitionServer.url
}, function (e) {
console.log(e.message);
return res.status(500).send({
error: true,
message: e.message
});
});
问题已在客户端解决:)
客户端代码是使用 XMLHttpRequest 的 JS(在 FF 和 Chrome 上测试)。错误响应到达 "onload" 事件处理程序,而不是 "onerror"。
"onload" 处理函数需要检查响应状态。如果错误状态 (500),则继续错误处理程序。
我正在使用 proxy.web 转发客户请求。 当目标服务器启动时,我的代码按预期工作。 当目标服务器关闭时,ECONNREFUSED 错误被捕获并打印到 console.log。我想将该错误发送回客户端,并尝试使用此处提供的示例。不幸的是,错误响应没有到达客户端(尝试了 chrome 和 firefox)。请找到下面的代码。为什么响应没有发送到客户端?
var proxyServer = http.createServer(function(req, res) {
if(req.path === 'forbidden') {
return res.end('nope');
}
var url_parts = url.parse(req.url);
var extname = path.extname(url_parts.pathname);
if (extname || url_parts.pathname.length <= 1){
proxy.web(req, res, {
target: 'http://localhost:'+config.fileServer.port
});
}
else{
proxy.web(req, res, {
target: config.recognitionServer.url
}, function(e) {
console.log(e.message);
if (!res.headersSent) {
res.writeHead(500, { 'content-type': 'application/json' });
}
res.end(JSON.stringify({ error: 'proxy_error',
reason: e.message
}));
});
}
}).listen(config.proxyServer.port, function () {
console.log('Proxy server is listening on port '
+ config.proxyServer.port);
});
一个好的方法是:
return res.status(500).send({
error: true,
message: 'your-error-message'
});
您重写的代码:
proxy.web(req, res, {
target: config.recognitionServer.url
}, function (e) {
console.log(e.message);
return res.status(500).send({
error: true,
message: e.message
});
});
问题已在客户端解决:) 客户端代码是使用 XMLHttpRequest 的 JS(在 FF 和 Chrome 上测试)。错误响应到达 "onload" 事件处理程序,而不是 "onerror"。 "onload" 处理函数需要检查响应状态。如果错误状态 (500),则继续错误处理程序。