Jak mogę HTTP wyzwalające do funkcji Google Cloud kątowej?

głosy
0

Próbuję konfiguracji API REST za pomocą funkcji Google Cloud, aby wysyłać e-maile, które mogą być spożywane przez mojego Kątowymi aplikacji, która jest gospodarzem Firebase. Moim problemem jest to, że nie mogę dostać mój kod kątowa do wyzwalania moją funkcję w chmurze Google. Może ktoś wyjaśnić, co jest nie tak?


Server-Side Google Cloud kod funkcji

Mam tej funkcji Google Cloud w functions/index.js:

// index.js
const functions = require('firebase-functions');

const sg = require('sendgrid')(
  process.env.SENDGRID_API_KEY || '<my-api-key-placed-here>'
);

exports.sendmail = functions.https.onRequest((req, res) => {
  sendMail(req.body);
  res.send(Mail Successfully Sent!);
})


function sendMail(formData) {
  const mailRequest = sg.emptyRequest({
    method: 'POST',
    path: '/v3/mail/send',
    body: {
      personalizations: [{
        to: [{ email: 'my.email@gmail.com' }],
        subject: 'Greenwich Test'
      }],
      from: { email: 'noreply@email-app.firebaseapp.com' },
      content: [{
        type: 'text/plain',
        value: 'Hello Joe! Can you hear me! Is the line still getting through?'
      }]
    }
  });

  sg.API(mailRequest, function (error, response) {
    if (error) {
      console.log('Mail not sent; see error message below.');
    } else {
      console.log('Mail sent successfully!');
    }
    console.log(response);
  });
}

Które mogą z powodzeniem wywołać w przeglądarce wklejając ten w pasku adresu:

https://us-central1-email-app.cloudfunctions.net/sendmail

Dostaję e-mail w ciągu pięciu minut po wejściu w przeglądarce. Jednak nie mogę kątowa do uruchomienia tej funkcji.


Client-Side kątowa Code

Poniżej jest mój kod po stronie klienta. contact-form.service.tsZawiera funkcję przycisk Wyślij za.

<!-- contact-form.component.html -->
<form [formGroup]=formService.contactForm (ngSubmit)=formService.onSubmitForm()>

  <input type=text formControlName=userFirstName>
  <label class=first-name-footer>First Name</label>

  <input type=text formControlName=userLastName>
  <label class=last-name-footer>Last Name</label>

  <button type=submit>SUBMIT</button>

</form>

// contact-form.component.ts
import { Component } from '@angular/core';

import { ContactFormService } from './contact-form.service';

@Component({
  selector: 'contact-form',
  templateUrl: './contact-form.component.html',
  styleUrls: ['./contact-content.component.css'],
  providers: [ContactFormService]
})
export class ContactFormComponent {

  constructor(public formService: ContactFormService) {
    formService.buildForm();
  }

}

// contact-form.service.ts
import { Injectable } from '@angular/core';
import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';
import { Http } from '@angular/http';

@Injectable()
export class ContactFormService {

  constructor(public formBuilder: FormBuilder, public http: Http) { }

  contactForm: FormGroup;
  formSubmitted: boolean = false;
  mailUrl = https://us-central1-email-app.cloudfunctions.net/sendmail;


  buildForm() {
    this.contactForm = this.formBuilder.group({
      userFirstName: this.formBuilder.control(null, Validators.required),
      userLastName: this.formBuilder.control(null, Validators.required)
    });
  }

  onSubmitForm() {
    console.log(this.contactForm.value);
    this.formSubmitted = true;
    this.http.post(this.mailUrl, this.contactForm.value);
    this.contactForm.reset();
  }
}

Po kliknięciu w przycisk, moja funkcja Google Cloud nie wywoła, ale this.contactForm.valuepoprawnie wyświetlane w konsoli.

Tak na zakończenie: Jak mogę dostać kątowa przedstawienia przycisk do wyzwalania moją funkcję w chmurze Google? Funkcja powodzeniem odpala kiedy użyć adresu URL w przeglądarce, ale nie mogę dostać mój kątowa aplikację aby wywołać tę samą funkcję.

Utwórz 06/04/2017 o 01:27
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Musisz zapisać się do wszelkich żądań HTTP indziej nie zostaną podniesione rozmowa

onSubmitForm() {
    console.log(this.contactForm.value);
    this.formSubmitted = true;
    ///////////////////////////////////////////////////////////////////
    this.http.post(this.mailUrl, this.contactForm.value).subscribe();
    ///////////////////////////////////////////////////////////////////
    this.contactForm.reset();
  }
Odpowiedział 06/04/2017 o 01:32
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more