首页 > 解决方案 > Firebase 函数在 firebase 部署中工作,但在本地不工作

问题描述

此代码不会在 localhost 中返回任何数据,但在部署到 firebase 时效果很好。有什么建议么?(尝试使用“firebase emulators:start”和“npm run serve”)。我应该得到一个包含课程的 json 对象。
我尝试使用 try/catch 没有任何结果:

错误:无法加载默认凭据。错误:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺

代码链接:https ://github.com/angular-university/firebase-course/blob/1-firebase-finished/functions/src/index.ts

  import * as functions from 'firebase-functions';
    import {db} from './init';
    import * as express from "express";
    const cors = require('cors');
    const app = express();
    app.use(cors({origin:true}));

    app.get('/courses', async (request, response) => {
        const snaps = await db.collection('courses').get();
        const courses:any[] = [];
        snaps.forEach(snap => courses.push(snap.data()));
        response.status(200).json({courses});
    });

    export const getCourses = functions.https.onRequest(app);

_____________________________________________________________________________

    init.ts

    const admin = require('firebase-admin');
    admin.initializeApp();
    export const db = admin.firestore();

app.get('/courses', async (request, response) => {
    try {
        const snaps = await db.collection('courses').get();
        const courses:any[] = [];
        snaps.forEach((snap: any) => courses.push(snap.data()));
        response.status(200).json({courses});
    } 
    catch(err) {
        console.error(err) 
    }
});
export const getCourses = functions.https.onRequest(app);

标签: node.jstypescriptfirebasegoogle-cloud-functions

解决方案


您需要提供权限凭据。它适用于谷歌云,因为有环境变量可以自动完成。


您需要使用凭据文件的路径在本地设置此环境变量。在你的终端试试这个:

export FIREBASE_CONFIG="/user/path/to/credential.json"

更多信息


尝试遵循文档。它提供了如何做到这一点的好例子。


推荐阅读