Ошибка: ошибка HTTP 400, запрос имеет ошибки. Облачные функции Firebase Firestore
Пока я запускаю команду firebase deploy, я получаю эту ошибку:
i развертывание функций
i: обеспечение необходимых API-интерфейсов...
i runtimeconfig: включение необходимых API-интерфейсов...
✔ runtimeconfig: включены все необходимые API
✔ функции: все необходимые API-интерфейсы включены
i функции: подготовка каталога функций для загрузки...
i функции: упакованные функции (4.04 KB) для загрузки
✔ функции: папка с функциями успешно загружена
i начало процесса выпуска (может занять несколько минут)...
i функции: создание функции followerNotification...
⚠ функции: не удалось создать функцию followerNotification
⚠ функции: Ошибка HTTP: 400, запрос имеет ошибки
⚠: 1 функция не была развернута.
У развертывания функций были ошибки. Чтобы продолжить развертывание других функций (например, > база данных), выполните: firebase deploy --except functions
Ошибка: функции не были правильно установлены.
Возникли проблемы? Попробуйте использовать firebase --help
Все остальное работает без проблем. Только когда я пытаюсь сделать что-то с Firebase Firestore.
Ответы
Ответ 1
Это происходило и со мной, потом я понял, что на 2-м уровне пожарный магазин допускает только документы, а не коллекции.
Я пытался слушать этот путь:
/collection/document/{wildcard}
Вы можете сделать что-то вроде
/collection/{wildcard}
или же
/collection/document/collection/{wildcard}
Ответ 2
У меня тоже была эта проблема. В моем случае это было потому, что мой путь триггера имел завершающую косую черту в пути к документу.
Итак, изменение:
functions.firestore
.document('some_path/{pushId}/')
To:
functions.firestore
.document('some_path/{pushId}')
Исправлено это для меня. Похоже, что это вызвано целым рядом проблем, и firebase cli не делает хорошую работу, объясняя причины, по которым.
Ответ 3
Проблема в том, что вы ссылаетесь только на коллекцию, а не на такой документ, как:
exports.myFunctionName = functions.firestore
.document('users/marie').onWrite((event) => {
// ... Your code here
});
Вам нужно сослаться на документ, как:
exports.myFunctionName = functions.firestore
.document('users/marie').onWrite((event) => {
// ... Your code here
});
Вы также можете использовать подстановочный знак, например:
exports.myFunctionName = functions.firestore
.document('users/{userId}').onWrite((event) => {
// ... Your code here
});
Это описано здесь: https://firebase.google.com/docs/functions/firestore-events
Надеюсь я смогу помочь
Ответ 4
Вероятно, проблема связана с длиной имени функции.
Итак, если имя:
myFunctionsFromWorksWithCustumersTiggersTests
измените для более короткого имени, например:
WorkWithCustumers
Надеюсь, я помог.
Ответ 5
У меня была та же ошибка при попытке опубликовать функцию прослушивания паба/саба Cloud, которая начиналась с цифровых символов.
exports.nightly_pruning = functions.pubsub.topic('24hr-tick').onPublish((event) => {
...
});
Исправлено, просто изменив имя:
exports.nightly_pruning = functions.pubsub.topic('nightly-tick').onPublish((event) => {
...
});
(Спасибо Николаю Гегельстаду выше. У меня нет репутации, чтобы комментировать.)
Ответ 6
Я также получал ту же ошибку, пока я не изменил имя своей функции из
create_template_
в
create_new_template
Возможно, что '_' (подчеркивание) в конце имени функции привело к этой ошибке.
Ответ 7
Это также может произойти, если вы используете неправильную версию Node. Я только что испытал это после установки версии моего узла на 8.x во время работы над функциями. Переключился обратно на v10.x и проблема исчезла.
Ответ 8
Окей, это то, на что тебе нужно смотреть.
так как у вас есть
exports.yourFunctionName = functions.firestore.document
Вам нужно взглянуть на .document
Ваш путь ДОЛЖЕН указывать на документ, а не на коллекцию.
так что это не сработает :
/level1/{level1Id}/level2
& lt; - указывает на коллекцию
это будет работать :
/level1/{level1Id}/level2/{level2Id}
Облачная функция будет искать, когда документ имеет действие action
.Надеюсь, это кому-нибудь поможет
Ответ 9
Моя проблема с тем же сообщением об ошибке заключалась в том, что pubsub Cloud Functions, похоже, не поддерживает темы с именами, начинающимися с цифровых символов.
Ответ 10
Просто хотел указать также, что линтер будет отклонять разрывы строк при объявлении слушателя, то есть:
exporst.myFunc = functions.firestore
.document('collection/{uid}')
.onEvent(...)
что линтер не очень помогает и не рассматривается в документации (как обычно)
Ответ 11
Я испытал это из-за подчеркивания в начале названия функции экспорта. Вы можете проверить это самостоятельно, попробовав это:
exports._someLongNameWithUnderscore= functions.auth.user().onCreate(user => {
return true;
});
exports.someLongNameWithoutUnderscore= functions.auth.user().onCreate(user => {
return true;
});
exports.shortName= functions.auth.user().onCreate(user => {
return true;
});
Тот, у которого подчеркивание в начале или в конце, завершится ошибкой с HTTP:400
а остальные развернутся.
Ответ 12
Если кто-то все еще испытывает это, в моем случае решение запускало npm install -g firebase-tools
для обновления cli и добавляло
"engines": {
"node": "8"
}
to package.json