Axios请求转发代码在响应原始调用时将json转换为缓冲区



我有一个nodejs服务网关代码,它将请求转发到Angular应用程序发出的服务。这是的一段代码

router.get('/callService/:service/*', (req, res) => {
certOption = { httpsAgent: new https.Agent({ ca: fs.readFileSync(config.get("sslCertFilename")) }) };
let serviceName = req.params.service;
let serviceRoute = req.params[0];
let authHeaders = {
"Authorization": req.headers["authorization"],
"subscriber-id": req.headers["subscriber-id"],
'Cache-Control': 'no-cache',
'Pragma': 'no-cache',
'Expires': 'Sat, 01 Jan 2000 00:00:00 GMT'
}
axios.get(`${config.get(serviceName)}/${serviceRoute}`, Object.assign(certOption, {
params: req.query,
headers: authHeaders
}))
.then(function (response) {
// handle success
res.json(response.data);
})
.catch(function (error) {
// handle error
console.log(error);
if (error.response)
res.status(error.response.status).json(error.response.data);
else
res.status(500).send();
});
});

该应用程序的使用方式如下:Angular应用程序(A(调用NodeJS网关(N(,后者依次调用服务(S(并将响应从S返回给A。

99%的时间代码都能按预期工作,并且已经工作了一年多了。从上个月开始,突然出现了一个问题,它没有将JSON从S返回到A,而是返回一个缓冲区对象{"type":"buffer","data":[…]}。当我解析缓冲区时,它会给我从S返回的JSON。当我重新启动服务时,它会重新开始工作。我无法弄清楚背后的问题。

感谢提供的任何帮助

原来解决方案是在请求中强制使用responseType:'json'标头。我有一个请求使用responseType:"arraybuffer",当应用程序处于压力下时,它会影响其他请求。

最新更新