Отправка запросов POST в скрипт Google Apps - PullRequest
0 голосов
/ 14 июля 2020

Это сработало.

Мне удалось создать конечную точку с помощью скрипта Google Apps, которая позволяет конечному пользователю отправлять сообщение мне (или другому контакту) POST, а также отправляет копию этого сообщения POST к ним.

Код POST-запроса был примерно таким:

function doPost(e) { 
  var response;
  try {
    response = sendContactEmail(e.postData.contents);
  }
  catch (error) { 
    throw JSON.stringify(error, null, '\t');
  }
    return ContentService
      .createTextOutput(JSON.stringify(response))
      .setMimeType(ContentService.MimeType.JSON)
}

Теперь, когда я попробовал это, я столкнулся с проблемой. Когда я попробовал это с моего сайта Angular, с кодом службы, например:

@Injectable()
export class ContactService implements SenderService {
  constructor(private http: HttpClient) {}

  send(message: EmailMessage): Observable<any> {
    return this.http.post<any>(
      "https://script.google.com/macros/s/AKfycbyEuvROpXUEi4wTX4N06nqF6oHlwihVc9Ut6-OG04zPi5yuOCzn/exec",
      JSON.stringify({ data: message }),
      {
        headers: {
          "Access-Control-Allow-Origin": "*",
        },
      }
    );
  }
}

, он не работает, и я столкнулся с проблемой, например,

Access to XMLHttpRequest at 'https://script.google.com/macros/s/AKfycbyEuvROpXUEi4wTX4N06nqF6oHlwihVc9Ut6-OG04zPi5yuOCzn/exec' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

При попытке отладить это проблема, я открываю Postman, делаю запрос, только чтобы получить следующий HTML ответ:

<!DOCTYPE html>
<html>

<head>
    <link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico">
    <title>Error</title>
    <style type="text/css">
        body {
            background-color: #fff;
            margin: 0;
            padding: 0;
        }

        .errorMessage {
            font-family: Arial, sans-serif;
            font-size: 12pt;
            font-weight: bold;
            line-height: 150%;
            padding-top: 25px;
        }
    </style>
</head>

<body style="margin:20px">
    <div><img alt="Google Apps Script" src="//ssl.gstatic.com/docs/script/images/logo.png"></div>
        <div style="text-align:center;font-family:monospace;margin:50px auto 0;max-width:600px">Authorization is
            required to perform that action.</div>
</body>

</html>

Я не очень разбираюсь в использовании скрипта Google Apps в качестве бэкэнда.

Следует ли мне настраивать токен OAuth для такого рода вещей, и если да, то как? Иначе, что мне делать с этой проблемой?

В настоящее время нет серверной части, кроме моего устаревшего скрипта Google Apps.

1 Ответ

1 голос
/ 14 июля 2020

В этом случае, как насчет использования "Content-Type": "text/plain" вместо "Access-Control-Allow-Origin": "*" следующим образом?

От:

headers: {
  "Access-Control-Allow-Origin": "*",
},

Кому:

headers: {
  "Content-Type": "text/plain"
},

Примечание :

  • В этом случае предполагается, что doPost(e) вашего скрипта Google Apps работает нормально. Когда ваш скрипт Google Apps выдает ошибку, возможно, ее не удастся удалить. Будьте осторожны.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...