Экспресс отправка пустого ответа при вызове другого API внутри обработчика маршрута - PullRequest
0 голосов
/ 03 июля 2019
app.post('/monitoring/restart', async function (req, res) {
  let serviceName = req.query.serviceName;
  let serviceType = req.query.type;
  let serverName = req.query.serverName;
  let forwarded = req.query.forwarded;
  try {
    if (serverName === process.env.SERVER_NAME) {
      let result = await restartService(serviceName, serviceType);
      res.status(200).json({
        success: true,
        result,
      });
    } else if (!forwarded) {
      let matchingServer = OTHER_SERVERS.map(server => server.split(':')).find(server => server[0] === serverName);
      const response = await axios.post(`http://${matchingServer[1]}:${config.server.port}/monitoring/restart?serviceName=${serviceName}&type=${serviceType}&serverName=${serverName}&forwarded=true`, {});
      res.status(200).json(response.data);
    } else {
      throw new Error('Service already forwarded');
    }
  } catch (error) {
    logger.error({
      description: 'Error in restarting service',
      error
    });
    res.status(500).json({
      success: false,
      error
    });
  }

});

Поэтому, когда я жду ответа от почтового запроса axios, я получаю ответ от другого сервера, но express не отправляет ответ обратно клиенту с помощью res.json (даже если я отправляю 'hello world' в качестве ответа ). Я получаю ERR_EMPTY_RESPONSE в браузере. Также экспресс-запрос вызывается дважды. Следует отметить, что если я не жду ответа, экспресс может отправить ответ. Я также попытался заменить запрос axios на setTimeout, равный 15 секундам, чтобы проверить, есть ли проблема с тайм-аутом, но это работает. Также заменил axios на библиотеку запросов, но безрезультатно.

...