Вызов очереди облачных задач Google из реагирующего клиента или облачной функции - PullRequest
0 голосов
/ 27 июня 2019

Я пытался реализовать вызов для создания задачи из облачной функции Google.

const functions = require('firebase-functions');
const {CloudTasksClient} = require('@google-cloud/tasks');

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
exports.createTask = functions.https.onRequest(async (req, res) => {

  // Instantiates a client.
  const client = new CloudTasksClient();

  const project = 'PROJECT_ID';
  const queue = 'test-queue';
  const location = 'asia-east2';
  const payload = 'hello';

  // Construct the fully qualified queue name.
  const parent = client.queuePath(project, location, queue);

  const task = {
    appEngineHttpRequest: {
      httpMethod: 'POST',
      relativeUri: '/log_payload',
    },
  };

  if (payload) {
    task.appEngineHttpRequest.body = Buffer.from(payload).toString('base64');
  }

  const inSeconds = 1;
  if (inSeconds) {
    task.scheduleTime = {
      seconds: inSeconds + Date.now() / 1000,
    };
  }

  const request = {
    parent: parent,
    task: task,
  };

  console.log('Sending task:');
  console.log(task);
  // Send create task request.
  const [response] = await client.createTask(request);
  const name = response.name;
  console.log(`Created task ${name}`);

  return res.status(200).send({ success: true });
});

Я получаю сообщение об ошибке ниже в журналах Firebase после вызова из axios

{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"INVALID_ARGUMENT"},"authenticationInfo":{"principalEmail":"joselitonarte@gmail.com"},"requestMetadata":{"requestAttributes":{},"destinationAttributes":{}},"serviceName":"cloudfunctions.googleapis.com","methodName":"google.cloud.functions.v1.CloudFunctionsService.CreateFunction","resourceName":"projects/testcloudtask-245007/locations/us-central1/functions/createTask"}

Аксиос был структурирован так У меня есть api.js, как показано ниже:

import axios from 'axios';

export default axios.create({
  baseURL: 'https://us-central1-testcloudtask-245007.cloudfunctions.net'
})

Он вызывается из App.js, как показано ниже:

import React from 'react';
import './App.css';
import api from './api';

export default class App extends React.PureComponent {
  onClickTest = async () => {
    const result = await api.get('/createTask', {
      method: 'GET',
    });
    console.log('REZZZ', result);
  };

  render() {
    return (
      <div className="App">
        <header className="App-header">
          <button onClick={this.onClickTest}> TEST </button>
        </header>
      </div>
    );
  }

}

...