Быстрый запуск облачных функций Google - PullRequest
0 голосов
/ 31 мая 2018

Мне очень тяжело начинать работу с функциями Google Cloud.В частности, создание простого HTTP-запроса POST.

Облачная функция выглядит следующим образом:

const express = require('express')
const errorhandler = require('errorhandler')
const logger = require('morgan')
const bodyParser = require('body-parser')
const cors = require('cors')

let app = express()

app.use(bodyParser.json())
app.use(logger('dev'))
app.use(errorhandler())
app.use(cors({origin: true}))

exports.helloWorld = (req, res) => {
  // Example input: {"message": "Hello!"}
  if (req.body.message === undefined) {
    // This is an error case, as "message" is required.
    res.status(400).send('No message defined!');
  } else {
    // Everything is okay.
    console.log(req.body.message);
    res.status(200).send('Success: ' + req.body.message);
  }
};

Я делаю HTTP-запрос из файла HTML простой формы и файла JSчто выглядит следующим образом:

const sendMessage = () => {



    const input = {
        "message" : document.getElementById('message').value
    }


    fetch('https://google-cloud-url-endpoint', {
        method: 'POST',
        headers: { "Content-Type": "application/json"},
        body: JSON.stringify(input)
    }).then(function(response) {
        return response.json()
    }).then(function(data) {

    })
}

После ввода сообщения в HTML-форме консоль сообщает:

ОПЦИИ https://https://google-cloud-url-endpoint 400 () index.html: 1 Не удалосьload https://google -cloud-url-endpoint : Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Происхождение 'http://127.0.0.1:53922' поэтому не разрешено.Ответ имел HTTP-код состояния 400. Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.index.html: 1 Uncaught (в обещании) TypeError: Не удалось получить

При проверке ответа сети я вижу:

Сообщение не определено!

Итак, из чего японимаю, это делает запрос и приносит ответ от функции.Мой вопрос: почему не удалось отправить «сообщение» функции?

1 Ответ

0 голосов
/ 31 мая 2018

РЕШЕНИЕ:

Вот мой код JS клиента:

function sendMessage() {

var message = document.getElementById('message').value

var data = JSON.stringify({
  "message": message
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://us-central1-stripe- 
update.cloudfunctions.net/function-1");
xhr.setRequestHeader("Content-Type", "application/json");


xhr.send(data);
}

Вот код Google Cloud Functions:

exports.helloWorld = (req, res) => {
  // Example input: {"message": "Hello!"}

  //set JSON content type and CORS headers for the response
    res.header('Content-Type','application/json');
    res.header('Access-Control-Allow-Origin', 'http://localhost:8000');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    res.header('Access-Control-Allow-Credentials', 'true');

    //respond to CORS preflight requests
    if (req.method == 'OPTIONS') {
        res.status(204).send('');
    }

  if (req.body.message === undefined) {
    // This is an error case, as "message" is required.
    res.status(400).send('No message defined!');
  } else {
    // Everything is okay.
    console.log(req.body.message);
    res.status(200).send('Success: ' + req.body.message);
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...