【问题标题】:Axios request forward code converts json to buffer when responding to original callaxios请求转发代码在响应原始调用时将json转换为缓冲区
【发布时间】:2021-07-01 20:27:13
【问题描述】:

我有一个 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 App (A) 调用 NodeJS Gateway (N),后者又调用 Service (S) 并将 S 的响应返回给 A。

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

感谢任何帮助

【问题讨论】:

    标签: node.js express axios


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 2022-11-04
      • 2021-01-14
      • 2011-07-13
      相关资源
      最近更新 更多