#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 Я согласен, обновляю его сейчас, чтобы сделать его более понятным. Спасибо!