将POST请求发送到Google Apps脚本

时间:2020-07-14 04:34:11

标签: angular google-apps-script xmlhttprequest cors

这正在工作。

我能够通过Google Apps脚本创建一个终结点,该终结点使最终用户可以向我(或另一个联系人)发布消息,也可以将该消息的副本发布给他们。

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.

在尝试调试此问题时,我鞭打打开邮递员,发出请求,仅取回以下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 个答案:

答案 0 :(得分:1)

在这种情况下,如何使用"Content-Type": "text/plain"代替"Access-Control-Allow-Origin": "*"如下?

发件人:

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

收件人:

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

注意:

  • 在这种情况下,它假设您的Google Apps脚本端的doPost(e)运行正常。当您的Google Apps脚本发生错误时,该错误可能无法消除。请注意这一点。

参考文献: