如何使用 AWS lambda 为 post 请求重定向 URL?
How can I redirect a URL for post request using AWS lambda?
这些结果用于 GET 和 POST 通过 API 网关和 lambda 请求响应。使用相同的 lambda 函数,但是当我使用 API 网关的 post 方法时,响应只显示 JSON。我该怎么办?
when i used post req
when i used get req
这是我的 lambda 函数
exports.handler = (event, context, callback) => {
const response = {
statusCode: 301,
headers: {
Location: 'https://google.com',
}
};
return callback(null, response);
}
谢谢。
GET 请求将 return 响应中提供的任何内容。在这种情况下,它是 JSON 对象 响应 。对于 POST 请求,相同的 response 对象正在 return 返回到 API 网关,然后 return 将其返回为- 是给客户的。
我通常在定义 aws lambda 时使用新的 async/await
模式:
exports.handler = async (event) => {
// do stuff...
}
你通常不需要 context
,除非你想使用一些关于你的 lambda 的 aws 相关信息。
我有一个辅助函数,它在代码库中被多次重复使用
function proxyResponse(inBody, inStatusCode = null, headers = {}, event = null) {
if (!isApiGateway(event)) {
if (inBody instanceof Error) {
throw inBody;
}
return inBody;
}
let statusCode = inStatusCode;
let body;
if (inBody instanceof Error) {
statusCode = statusCode || INTERNAL_SERVER_ERROR;
body = JSON.stringify({
message: inBody.message,
code: statusCode,
});
} else if (inBody instanceof Object) {
body = JSON.stringify(inBody);
} else {
body = inBody;
}
const [origin] = event ? caseHandler(event.headers, 'origin') : [];
return {
statusCode: statusCode || 200,
body,
headers: Object.assign({
'Access-Control-Allow-Headers': 'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token,x-api-key,Authorization',
'Access-Control-Allow-Origin': origin,
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Methods': 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT',
}, headers),
};
}
还有一个:
function caseHandler(mixedCaseObject, inputKey) {
if (!mixedCaseObject || !inputKey) {
return [];
}
return Object.keys(mixedCaseObject)
.filter((key => key.toLowerCase() === inputKey.toLowerCase()))
.map(key => mixedCaseObject[key]);
}
还有这个:
function isApiGateway(event) {
return (!!event.httpMethod && !!event.headers && !!event.requestContext);
}
所以在 lambda 中,每当我想 return 我使用这个辅助函数的东西时:
module.exports.handler = async (event) => {
try{
// do stuff...
return proxyResponse(YOUR_CUSTOM_BODY_OBJECT, Api.HTTP.OK, {}, event);
} catch(error) {
return proxyResponse(error, Api.HTTP.INTERNAL_SERVER_ERROR, {}, event);
}
}
这些结果用于 GET 和 POST 通过 API 网关和 lambda 请求响应。使用相同的 lambda 函数,但是当我使用 API 网关的 post 方法时,响应只显示 JSON。我该怎么办?
when i used post req
when i used get req 这是我的 lambda 函数
exports.handler = (event, context, callback) => {
const response = {
statusCode: 301,
headers: {
Location: 'https://google.com',
}
};
return callback(null, response);
}
谢谢。
GET 请求将 return 响应中提供的任何内容。在这种情况下,它是 JSON 对象 响应 。对于 POST 请求,相同的 response 对象正在 return 返回到 API 网关,然后 return 将其返回为- 是给客户的。
我通常在定义 aws lambda 时使用新的 async/await
模式:
exports.handler = async (event) => {
// do stuff...
}
你通常不需要 context
,除非你想使用一些关于你的 lambda 的 aws 相关信息。
我有一个辅助函数,它在代码库中被多次重复使用
function proxyResponse(inBody, inStatusCode = null, headers = {}, event = null) {
if (!isApiGateway(event)) {
if (inBody instanceof Error) {
throw inBody;
}
return inBody;
}
let statusCode = inStatusCode;
let body;
if (inBody instanceof Error) {
statusCode = statusCode || INTERNAL_SERVER_ERROR;
body = JSON.stringify({
message: inBody.message,
code: statusCode,
});
} else if (inBody instanceof Object) {
body = JSON.stringify(inBody);
} else {
body = inBody;
}
const [origin] = event ? caseHandler(event.headers, 'origin') : [];
return {
statusCode: statusCode || 200,
body,
headers: Object.assign({
'Access-Control-Allow-Headers': 'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token,x-api-key,Authorization',
'Access-Control-Allow-Origin': origin,
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Methods': 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT',
}, headers),
};
}
还有一个:
function caseHandler(mixedCaseObject, inputKey) {
if (!mixedCaseObject || !inputKey) {
return [];
}
return Object.keys(mixedCaseObject)
.filter((key => key.toLowerCase() === inputKey.toLowerCase()))
.map(key => mixedCaseObject[key]);
}
还有这个:
function isApiGateway(event) {
return (!!event.httpMethod && !!event.headers && !!event.requestContext);
}
所以在 lambda 中,每当我想 return 我使用这个辅助函数的东西时:
module.exports.handler = async (event) => {
try{
// do stuff...
return proxyResponse(YOUR_CUSTOM_BODY_OBJECT, Api.HTTP.OK, {}, event);
} catch(error) {
return proxyResponse(error, Api.HTTP.INTERNAL_SERVER_ERROR, {}, event);
}
}