Node.js CORS使用Serverless和PUT命令发出问题
我在Serverless和AWS上遇到了另一个CORS问题。似乎我需要明确地告诉它,以允许一个PUT方法,但我不确定这段代码去了哪里。我的Lambda函数有以下代码: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
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中有一个未定义的值被传递到函数中。我现在可以解决了,谢谢大家的帮助。