Typescript CORS 已启用但仍然出现 CORS 错误

标签 typescript cors

<分区>

我在我的 Angular 7.0.5 项目中添加了一个 cors header ,但在提交表单并将表单数据发送到“后端”(谷歌脚本)时我仍然收到以下错误:

在“https://script.google.com/blabla”访问 XMLHttpRequest '来自原产地' http://localhost:4200 ' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。

当我在禁用安全功能的 Chrome 中尝试此操作时,我没有收到此错误。

可能是语法错误,但我已经搜索了很长时间并尝试了很多方法,但我无法让它工作。

import {Component, OnInit} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {HttpClient, HttpParams, HttpHeaders} from '@angular/common/http';
import {ContactFormDto} from '../services/dto/contactform.dto';

const headers = new HttpHeaders()
    .set('Content-Type', 'undefined')
    .set('Access-Control-Allow-Origin', '*')
    .set('Access-Control-Allow-Methods', 'POST')
    .set('Access-Control-Allow-Headers', 'Origin')
    .set('Access-Control-Allow-Credentials', 'true');

@Component({
    selector: 'app-contact',
    templateUrl: './contact.component.html',
    styleUrls: ['./contact.component.sass']
})

export class ContactComponent implements OnInit {

contactForm: FormGroup;
submitted = false;

MAIL_SCRIPT_URL = 
'https://script.google.com/scriptlocation';

private contactFormDto: ContactFormDto;

constructor(private formBuilder: FormBuilder, private http: HttpClient) {
    this.contactForm = this.formBuilder.group({
       name: ['', Validators.required],
       email: ['', Validators.required],
       message: ['', Validators.required],
    });
}

onSubmit() {
  this.submitted = true;
  if (this.contactForm.valid) {
  this.contactFormDto = new ContactFormDto(
    this.contactForm.controls.name.value,
    this.contactForm.controls.email.value,
    this.contactForm.controls.message.value
  );

  this.http.post(
    this.MAIL_SCRIPT_URL,
    this.contactFormDto,
    {headers}
  ).subscribe(data => {
    console.log('Mail has been sent' + data);
  }, error => {
    console.log('Mail has not been sent ' + error);
  });

  console.log('name: ' + this.contactForm.controls.name.value + ' email: ' + 
  this.contactForm.controls.email.value + ' message: ' + 
  this.contactForm.controls.message.value);
  }
}

ngOnInit() {
}

“后端”是一个谷歌脚本(当我将表单结果发布到 url 时运行)

var TO_ADDRESS = "myaddress@gmail.com"; // where to send form data

function doPost(e) {

try {
  Logger.log(e); // the Google Script version of console.log see: Class 
  Logger
  MailApp.sendEmail(TO_ADDRESS, "Contact Form Submitted",
                  JSON.stringify(e.parameters));
  // return json success results
  return ContentService
      .createTextOutput(
        JSON.stringify({"result":"success",
                        "data": JSON.stringify(e.parameters) }))
      .setMimeType(ContentService.MimeType.JSON);
} catch(error) { // if error return this
  Logger.log(error);
  return ContentService
      .createTextOutput(JSON.stringify({"result":"error", "error": e}))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

最佳答案

如果你想要最简单的方法,你可以使用插件。

Allow-Control-Allow-Origin

网址链接:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

关于Typescript CORS 已启用但仍然出现 CORS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53412124/

相关文章:

javascript - 当组件可以随时卸载时,如何使用 React 管理 useEffect 中的竞争条件风险?

javascript - Ajax API 调用导致 CORS 问题

Laravel 5 CORS - XMLHttpRequest 无法加载 http ://myapi. com.预检响应具有无效的 HTTP 状态代码 500

JQuery跨域基本认证调用

javascript - 使用 TypeScript 扩展 Object.prototype

javascript - 我可以在 typescript 中使用 handsontable 吗

javascript - 我可以告诉 useMemo 跳过其依赖项数组中的空值吗?

javascript - 如何添加模式: 'no-cors' to XMLHttpRequest?

javascript - 无法从 Chrome 64 中的本地 css 文件访问 cssRules

javascript - 具有不同通用签名的继承