Ошибка: ошибка 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