首页 > 解决方案 > 如何从 Firebase Cloud 功能向我的项目 API 发出 http 请求?

问题描述

您好我正在尝试使用 Firebase 云功能发出 API Post 请求,这是代码。 我的工作是从云端获取详细信息并向我的项目 API 发出 http 请求。但是我得到一个找不到模块的错误!!我已经把它放好了。那么如何进行api调用?

这是我的index.ts

import * as functions from 'firebase-functions';

import * as admin from 'firebase-admin';

import {TenantServiceProxy, CreateTenantInput} from '../../src/app/cloud/cloud-service';
 
let _tenantService: TenantServiceProxy;

const tenant = new CreateTenantInput();

admin.initializeApp();

export const onOrganizationUpdate =
    functions.firestore.document('organizations/{id}').onUpdate(change => {
        const after = change.after.data()
        const payload = {
            data: {
                OrganizationId: String(after.OrganizationId),
                Name: String(after.Name),
                IsDeleted: String(after.IsDeleted)
            }

        }
        console.log("updated", payload);
        https.get('https://reqres.in/api/users?page=2', (resp: any) => {
            let data = '';

            // A chunk of data has been recieved.
            resp.on('data', (chunk: any) => {
                data += chunk;
            });

            // The whole response has been received. Print out the result.
            resp.on('end', () => {
                console.log("-------------------->",JSON.parse(data));
            });

        }).on("error", (err: any) => {
            console.log("Error: " + err.message);
        });
        return admin.messaging().sendToTopic("OrganizationId", payload)
    })

export const onOrganizationCreate =
functions.firestore.document('organizations/{id}').onCreate(change=>{
    const onCreationTime =change.data()
    const payload={
        data:{
            organizationId:String(onCreationTime.organizationId),
            name:String(onCreationTime.name),
            isDeleted:String(onCreationTime.isDeleted)
        },
        
    }

    console.log("created",payload);
    tenant.pkOrganization = payload.data.organizationId;
    tenant.name = payload.data.name;
    tenant.isDeleted = Boolean(payload.data.isDeleted);
    _tenantService.createTenant(tenant).subscribe(()=>{
        console.log("created",payload);
    });
    return admin.messaging().sendToTopic("OrganizationId",payload)
})

这是 cloud.service.module.TS

//cloud service module
import { AbpHttpInterceptor } from '@abp/abpHttpInterceptor';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { NgModule } from '@angular/core';
import * as ApiServiceProxies from '../../app/cloud/cloud-service';
@NgModule({
    providers: [
        ApiServiceProxies.TenantServiceProxy,
        { provide: HTTP_INTERCEPTORS, useClass: AbpHttpInterceptor, multi: true }
    ]
})
export class CloudServiceModule { }

这是我的 api 调用服务

@Injectable()
export class TenantServiceProxy {
    private http: HttpClient;
    private baseUrl: string;
    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;

    constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {
        this.http = http;
        this.baseUrl = baseUrl ? baseUrl : '';
    }
    createTenant(input: CreateTenantInput | null | undefined): Observable<void> {
        let url_ = this.baseUrl + '/api/services/app/Tenant/CreateTenant';
        url_ = url_.replace(/[?&]$/, '');

        const content_ = JSON.stringify(input);

        const options_: any = {
            body: content_,
            observe: 'response',
            responseType: 'blob',
            headers: new HttpHeaders({
                'Content-Type': 'application/json',
            })
        };

        return this.http.request('post', url_, options_).pipe(_observableMergeMap((response_: any) => {
            return this.processCreateTenant(response_);
        })).pipe(_observableCatch((response_: any) => {
            if (response_ instanceof HttpResponseBase) {
                try {
                    return this.processCreateTenant(<any>response_);
                } catch (e) {
                    return <Observable<void>><any>_observableThrow(e);
                }
            } else {
                return <Observable<void>><any>_observableThrow(response_);
            }
        }));
    }

    protected processCreateTenant(response: HttpResponseBase): Observable<void> {
        const status = response.status;
        const responseBlob =
            response instanceof HttpResponse ? response.body :
                (<any>response).error instanceof Blob ? (<any>response).error : undefined;

        const _headers: any = {}; if (response.headers) { for (const key of response.headers.keys()) { _headers[key] = response.headers.get(key); } }
        if (status === 200) {
            return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
                return _observableOf<void>(<any>null);
            }));
        } else if (status !== 200 && status !== 204) {
            return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
                return throwException('An unexpected server error occurred.', status, _responseText, _headers);
            }));
        }
        return _observableOf<void>(<any>null);
    }
}

我已经在我的服务中定义了模块。app.module.ts

FireBase 在终端中部署代码

标签: firebasefirebase-realtime-databasegoogle-cloud-firestoregoogle-cloud-functionsabp

解决方案


推荐阅读