Функции Firebase: случайные 404-х годов

#javascript #firebase #google-cloud-platform #google-cloud-functions

#javascript #firebase #google-облачная платформа #google-cloud-функции

Вопрос:

Я использую функции firebase на сервере для вызовов API. В 70% случаев все работает нормально, но внезапно некоторые из моих вызовов функций начинают не выполняться, давая моему API значение 404 и не работают в течение следующих нескольких часов.

В моем StackDriver я вижу, что функция не вызывается снова, когда я пытаюсь. Мой API просто выдает мне 404, даже не доходя до сервера.

Ниже приведен один из вызовов, который время от времени завершается ошибкой. Переходя к URL-адресу, который я выбираю, всегда отображается результат GET, поэтому я понятия не имею, в чем проблема.

Вызов API:

 const getCreators = () => {
  return window
    .fetch(url   '/get-creators', {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    })
    .then((res) => {
      console.log(res);
      if (res.status === 200) {
        return res.json();
      } else {
        return null;
      }
    })
    .then((data) => {
      if (!data || data.error) {
        return null;
      } else {
        return data;
      }
    });
};

  

Серверный код:

 const app = express();

  app.get('/get-creators', async (req, res) => {
    console.log('creators: ');
    creators
      .find()
      .toArray()
      .then((result) => {
        console.log(result);
        res.status(200).send(result);
      })
      .catch(() => {
        console.log('error');
        res.send('error');
      });
  });

app.listen(4242, () => console.log(`Node server listening at https ${4242}!`));

exports.app = functions.https.onRequest(app);
  

Комментарии:

1. Если запрос не доходит до сервера, почему ответом является 404? Обычно вы получаете сетевую ошибку, если сетевой запрос не доходит до сервера. Если вы получаете ответ (даже если это ответ с ошибкой), вы достигли сервера.

2. @3limin4t0r Я так и думал, это не имеет никакого смысла. Возможно, он пытается выполнить локальный поиск, но регистрирует мой результат в api, в котором указан правильный URL-адрес, к которому он пытается подключиться.

3. @3limin4t0r нашел ответ. Сервер время от времени прослушивал всех локально и не сообщал мне. Хотя спасибо!

Ответ №1:

Нашел это. Вы не хотите, чтобы приведенный ниже код был на вашем сервере:

 app.listen(4242, () => console.log(`Node server listening at https ${4242}!`));
  

Я прокомментировал этот код, переиздал, и все хорошо.

Я думал, что это не имеет значения, но, по-видимому, однажды в голубой луне он может и попытается заставить сервер прослушивать локально, что дало мне 404.

Комментарии:

1. Я рад, что вы нашли свое решение, но этот ответ на самом деле мало что объясняет. Что случилось с блоком кода? Вы добавили этот код? Удалить его? Изменить это? Добавление before и after помогло бы объяснить для будущих читателей. Обычно вы можете увидеть, что изменилось, сначала просмотрев код в вопросе, но этой строки нигде нет.

2. @3limin4t0r Я согласен, обновляю его сейчас, чтобы сделать его более понятным. Спасибо!