Node.js CORS使用Serverless和PUT命令发出问题

Node.js CORS使用Serverless和PUT命令发出问题,node.js,amazon-web-services,serverless-framework,Node.js,Amazon Web Services,Serverless Framework,我在Serverless和AWS上遇到了另一个CORS问题。似乎我需要明确地告诉它,以允许一个PUT方法,但我不确定这段代码去了哪里。我的Lambda函数有以下代码: module.exports.update = (event, context, callback) => { const timestamp = new Date().getTime(); const data = JSON.parse(event.body); if (typeof event.pathPar

我在Serverless和AWS上遇到了另一个CORS问题。似乎我需要明确地告诉它,以允许一个PUT方法,但我不确定这段代码去了哪里。我的Lambda函数有以下代码:

module.exports.update = (event, context, callback) => {
  const timestamp = new Date().getTime();
  const data = JSON.parse(event.body);
  if (typeof event.pathParameters.timeoffgroupid !== 'string') {
    console.error('Validation Failed');
    callback(new Error('Couldn\'t update the todo item.'));
    return;
  }
  const params = {
    TableName: 'TimeOffGroup',
    Key: {
      timeoffgroupid: event.pathParameters.timeoffgroupid,
    },
    ExpressionAttributeValues: {
      ':timeOffGroup': data.timeOffGroup,
      ':timeOffGroupColor': data.timeOffGroupColor,
      ':dateModified': timestamp
    },
    UpdateExpression: 'SET timeOffGroup = :timeOffGroup, timeOffGroupColor = :timeOffGroupColor, dateModified = :dateModified',
    ReturnValues: 'ALL_NEW',
  };

  dynamoDb.update(params, (error, result) => {
    if (error) {
      console.error(error);
      callback(new Error('Couldn\'t update the todo item.'));
      return;
    }
    const response = {
      statusCode: 200,
      body: JSON.stringify(result.Attributes),
      headers: {
        "Access-Control-Allow-Origin" : "*", // Required for CORS support to work
        "Access-Control-Allow-Credentials" : true
      }
    };
    callback(null, response);
  });
};
我得到的错误是:

无法加载XMLHttpRequest . 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为502。angular.js:14328 可能未经处理的拒绝: {“data”:null,“status”:-1,“config”:{“method”:“PUT”,“transformRequest”:[null],“transformResponse”:[null],“jsonpCallbackParam”:“callback”,“data”:{},“url”:“params”:{“timeOffGroup”:“Holiday” 编辑“}”,标题:{“接受”:“应用程序/json,文本/plain, /,“内容类型”:“应用程序/json;字符集=utf-8”},,“状态文本”:“}”

我已经关注了所有关于无服务器教程的调用,以使CORS正常工作。但是我似乎得到了get和create命令,但是PUT命令不起作用。是否还有一些地方需要设置update命令以允许跨域放置

看起来我可能需要更多的PUT方法访问: 标题:

{
    "Access-Control-Allow-Origin" : "*", // Required for CORS support to work
    "Access-Control-Allow-Credentials" : true
}

您的问题似乎是没有处理
选项
动词。请参阅此部分以了解有关此要求的更多信息

在发出
PUT
请求之前,浏览器将预先发出
OPTIONS
请求,作为一项安全措施,以确保服务器能够预期此类请求。如果您不支持
选项
,它将不会发出
放置
请求

要解决此问题,请将serverless.yml文件更改为添加
选项
支持

functions:
  func:
    handler: handler.func
    events:
      - http: PUT foo/bar
      - http: OPTIONS foo/bar
使用以下内容修改句柄:

module.exports.func = (event, context, callback) => {

  try {
    switch(event.httpMethod + ' ' + event.resource) {
      case 'PUT /foo/bar':
        handlePut(callback);
        break;
      case 'OPTIONS /foo/bar':
        handleOptions(callback);
        break;
      default:
        // return HTTP 400
    }
  }
  catch (err) {
     // return HTTP 500
  }
};

const handlePut = (callback) => {
    callback(null, { 
        statusCode: 200, 
        headers: {
            'Access-Control-Allow-Origin': '*'
        }, 
        body: JSON.stringify({
            message: 'PUT'
        })
    });
};

const handleOptions = (callback) => {
    callback(null, {
        statusCode: 200,
        headers: {
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Headers': 'origin, content-type, accept',
            'Access-Control-Allow-Methods': 'POST, PUT, OPTIONS'
        }
    });
};

您可以通过增加lambda中的超时来尝试。这解决了我的CORS问题。

您收到该特定错误消息的原因可能是您的服务器未配置为将Access Control Allow Origin response标头添加到服务器错误响应中。该消息指出的真正潜在问题是服务器端出现502错误,这似乎表明正在发生与CORS配置无关的其他故障。因此,您可能希望查看服务器日志,以获得导致502服务器故障的更多详细信息,以便能够修复该故障。它可能像小语法错误一样简单。是的,我查看了服务器日志,它说“ValidationException:Invalid UpdateExpression:expression中使用的表达式属性值未定义;属性值::timeOffGroupColor”正在查找输入错误。我在javascript中有一个未定义的值被传递到函数中。我现在可以解决了,谢谢大家的帮助。