Эмулятор Firebase возвращает пустые данные, а после развертывания работает нормально - PullRequest
2 голосов
/ 25 апреля 2020

Я написал очень простой c API, который будет возвращать услуги. Я попытался запустить этот API в эмуляторе, но он возвращает пустые данные

{
    "status": "success",
    "statusCode": 200,
    "message": "Services retrieved",
    "data": []
}

Я настроил firestore, функции и эмуляторы базы данных. И я использую

"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.0"

Любая идея, почему ответ данных пуст?

РЕДАКТИРОВАТЬ

Это мой метод для вызова службы

export const activeServices = functions.https.onRequest((request, response) => {
    let services = new Array<string>();
    admin.firestore().collection(newServices).get()
    .then(serviceSnapshot => {
        serviceSnapshot.docs.forEach(doc => {
            if(doc.data().service_active){
                services.push(doc.data().service_name)
            }
        })
        const successResponse = common.success("success", 200, "Services retrieved", services)
        response.send(successResponse)
    })
    .catch(error => {
        const errorResponse = common.error("fail", 500, "Failed to get active services")
        console.error(errorResponse)
        response.send(errorResponse)
    })
})

Я попытался выполнить это, и он ничего не возвращал и выполнил те же функции после развертывания. И я получил ответ. Из приведенных ниже ответов я думаю, что при запуске только функций будет пытаться связаться с производственной базой данных.

firebase emulators:start --only functions

functions: The Cloud Firestore emulator is not running, so calls to Firestore will affect production.
⚠  External network resource requested!
   - URL: "http://xxx.xxx.xxx.xxx/computeMetadata/v1/instance"
 - Be careful, this may be a production service.
⚠  External network resource requested!
   - URL: "http://metadata.google.internal./computeMetadata/v1/instance"
 - Be careful, this may be a production service.

Похоже, что он пытается связаться с производственной, но не может выполнить ни одного успешного запроса.

1 Ответ

0 голосов
/ 30 апреля 2020

Если он не работает в эмуляторе, но работает в развертывании, это означает, что в вашем эмулированном пожарном хранилище нет данных.

Попробуйте: запустите Firebase:emulators start --only functions, чтобы используемая база данных была вашей рабочей базой данных. (Очевидно, сделайте это с осторожностью, если вы собираетесь манипулировать данными там.)

Затем запустите эмулированную функцию для вашей производственной базы данных. Если вы получаете нужные данные, возможно, проблема в том, что ваш эмулированный firestore

Лично я обнаружил, что работа с эмулируемыми функциями, но не эмулированным хранилищем огня, является для меня лучшим процессом тестирования, где я создаю дублирующий раздел моей производственной базы данных для целей тестирования. Это по-прежнему допускает такие тонкости, как горячая перезагрузка, но я считаю, что поведение mimi c более точно и предсказуемо. Затем вы можете заставить функции интеллектуально указывать на соответствующий раздел базы данных в зависимости от того, эмулируете вы или нет.

...