【问题标题】:CORS Error: The request has been blocked because of the CORS policyCORS 错误:由于 CORS 策略,请求已被阻止
【发布时间】:2020-09-30 08:14:24
【问题描述】:

我正在编写脚本以将数据发布到电子表格,但在 Postman 上进行测试时出错:

CORS Error: The request has been blocked because of the CORS policy

下面是我的脚本:

var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1UEzI8a8qVBqzVGuA4AZKs4eb4Y5bqOlIOJWwBDkEKb8/edit#gid=0");
var sheet = ss.getSheetByName('Items'); // be very careful ... it is the sheet name .. so it should match 

function doPost(e) {
    var action = e.parameter.action;

    if (action == 'addItem') {
        return addItem(e);
    }
}

function addItem(e) {
    var date = new Date();
    var id = "Item" + sheet.getLastRow(); // Item1
    var itemName = e.parameter.itemName;
    var brand = e.parameter.brand;

    sheet.appendRow([date, id, itemName, brand]);

    return ContentService.createTextOutput("Success").setMimeType(ContentService.MimeType.TEXT);
}

【问题讨论】:

  • 这个错误已经很好地自我解释了。 e 没有属性 parameter。你到底想得到什么?
  • 你如何调用你的doPost(e) 函数,从哪里调用?
  • 删除了第一个错误,因为它无关紧要。看我的,我们回答here

标签: google-apps-script google-sheets cors postman


【解决方案1】:

您需要从doPost 而不是addItem 返回一个值。

这也总是让我绊倒。如果没有返回值,则会收到 CORS 警告并且 POST 失败。

因此,很难判断脚本是否失败或发布请求是否存在问题。尝试将所有内容包装在 try, catch, finally 中,以确保您始终返回一个值。

试试这个。这有点冗长,但它应该确保您肯定会收到对您的 POST 请求的响应,并且该响应包含您需要查看问题所在的所有信息。

function doPost(e) {
  var returnJson = {
    success: false,
    errors: [],
    returnValue: null,
    debug: [],
  };

  try {
    if (e.parameter && e.parameter.action) {
      var action = e.parameter.action;
      if (action == "addItem") {
        var itemAdded = addItem(e);
        returnJson.debug.push(itemAdded);
      }
      returnJson.success = true;
    } else {
      returnJson.debug.push("No value 'action' in e.parameter");
    }
  } catch (err) {
    returnJson.errors.push(err);
  } finally {
    return ContentService.createTextOutput(
      JSON.stringify(returnJson)
    ).setMimeType(ContentService.MimeType.JSON);
  }
}

function addItem(e) {
  var returnJson = {
    success: false,
    errors: [],
    returnValue: null,
    debug: [],
  };
  try {
    var date = new Date();
    var id = "Item" + sheet.getLastRow(); // Item1
    var itemName = e.parameter.itemName;
    var brand = e.parameter.brand;

    var ss = SpreadsheetApp.openByUrl(
      "https://docs.google.com/spreadsheets/d/1UEzI8a8qVBqzVGuA4AZKs4eb4Y5bqOlIOJWwBDkEKb8/edit#gid=0"
    );
    var sheet = ss.getSheetByName("Items"); // be very careful ... it is the sheet name .. so it should match

    sheet.appendRow([date, id, itemName, brand]);
    returnJson.success = true;
  } catch (err) {
    returnJson.errors.push(err);
  } finally {
    return returnJson;
  }
}




【讨论】:

    猜你喜欢
    • 2023-01-19
    • 2022-01-14
    • 2019-11-30
    • 2019-10-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2019-08-04
    相关资源
    最近更新 更多