Ich stoße in ein anderes CORS-Problem mit Serverless und AWS. Scheint, ich muss es ausdrücklich sagen, um eine PUT-Methode zu erlauben, aber ich bin mir nicht sicher, wohin dieser Code geht. Ich habe den folgenden Code für meine Lambda-Funktion:CORS Problem mit Serverless und PUT Befehl
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);
});
};
Der Fehler Ich erhalte ist:
XMLHttpRequest nicht https://pwqlomgq89.execute-api.us-east-1.amazonaws.com/dev/timeoffgroup/7d463800-0935-11e7-b618-4b1d72ddca8e?timeOffGroup=Holiday+edited laden kann. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten -Ressource vorhanden. Herkunft 'http://localhost:9000' ist daher nicht erlaubt Zugriff. Die Antwort hatte den HTTP-Statuscode 502. angular.js: 14328 Möglicherweise nicht behandelte Ablehnung: {"data": null, "status": - 1, "config": {"method": "PUT", "transformRequest": [null], "transformResponse": [null], "jsonpCallbackParam": "Rückruf", "Daten": {}, "url": "https://pwqlomgq89.execute-api.us-east-1.amazonaws.com/dev/timeoffgroup/7d463800-0935-11e7-b618-4b1d72ddca8e", "params": {"timeOffGroup": "Feiertag bearbeitet"} , "headers": {"Übernehmen": "application/json, text/plain, /", "Inhaltstyp": "application/json; charset = utf-8"}}, "statusText": " "}
Ich habe alle Aufrufe auf Serverless-Tutorials verfolgt, um die CORS zu arbeiten. Aber es scheint, ich habe die get und create zu arbeiten, aber der PUT-Befehl funktioniert nicht. Gibt es einen Ort, an dem ich den update-Befehl noch setzen muss, um PUT für domänenübergreifend zu erlauben?
Sieht aus wie ich für eine PUT-Methode Zugriff mehr hier vielleicht brauchen: Header:
{
"Access-Control-Allow-Origin" : "*", // Required for CORS support to work
"Access-Control-Allow-Credentials" : true
}
Der Grund, warum Sie diese Nachricht bestimmten Fehler bekommen sind ist wahrscheinlich nur, dass der Server nicht konfiguriert ist, die Access-Control-Allow-Origin hinzufügen Antwortheader zu Server-Fehlerantworten. Das eigentliche zugrunde liegende Problem, das diese Nachricht anzeigt, ist, dass auf der Serverseite ein 502-Fehler auftritt, der darauf hindeutet, dass ein anderer Fehler auftritt, der nichts mit Ihrer CORS-Konfiguration zu tun hat. Sie möchten wahrscheinlich in Ihren Serverprotokollen nachsehen, um mehr Details darüber zu erhalten, was den 502-Serverfehler verursacht hat, damit Sie das beheben können. Es könnte etwas so einfach wie geringfügige Syntaxfehler sein. – sideshowbarker
Ja, ich schaute auf die Serverprotokolle, es heißt "ValidierungException: Ungültige UpdateExpression: Ein Expression-Attribut Wert im Ausdruck verwendet wird nicht definiert; Attributwert:: timeOffGroupColor" Suchen Sie jetzt nach Tippfehler . –
Ich habe einen undefinierten Wert in JavaScript in die Funktion übergeben. Ich kann das jetzt klären, vielen Dank für die Hilfe. –