Sto*_*iev 4 typescript aws-cdk
我已经cdk init注册了一个应用程序。我的应用程序有一个 ApiGateway 堆栈,其中“GET”方法绑定到根 (\'/\')。Lambda 函数绑定到“GET”方法。我希望当我发送带有查询参数的“GET”请求时,例如?param1=uno¶m2=dos\n在 myHandler 中使用类似的内容访问它们
!pseudo-code alert! \nconst queryParams = event.queryParams\nRun Code Online (Sandbox Code Playgroud)\n\n堆栈配置在lib/my-app-stack.ts
import cdk = require("@aws-cdk/core");\nimport lambda = require("@aws-cdk/aws-lambda");\nimport apigateway = require("@aws-cdk/aws-apigateway");\nimport path = require("path");\n\nexport class ApiIntegrationStack extends cdk.Stack {\n constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {\n super(scope, id, props);\n\n // Handlers\n const my_handler = new lambda.Function(this, "myHandler", {\n code: lambda.Code.asset(path.join(__dirname, "../src")),\n handler: "handler.myHandler",\n runtime: lambda.Runtime.NODEJS_8_10,\n memorySize: 1024\n });\n const my_integration = new apigateway.LambdaIntegration(\n my_handler\n );\n\n const default_handler = new lambda.Function(this, "defaultHandler", {\n code: lambda.Code.asset(path.join(__dirname, "../src")),\n handler: "handler.defaultHandler",\n runtime: lambda.Runtime.NODEJS_8_10,\n memorySize: 1024\n });\n\n // API Gateway set-up\n const my_api = new apigateway.LambdaRestApi(this, "myApi", {\n handler: default_handler,\n proxy: false\n });\n\n // Routing\n my_api.root.addMethod("GET", my_integration); /*, {\n requestParameters: {\n \'page_tag\': true,\n \'language\': true\n }\n });\n */\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\n\n处理程序配置在src/handler.ts
"use strict";\nimport { Handler, Context, Callback } from "aws-lambda";\n\nconst myHandler: Handler = (\n event: any,\n context: Context,\n callback: Callback\n) => {\n\n const queryParams = []; // ??\n const response = {\n statusCode: 200,\n headers: {\n "Access-Control-Allow-Origin": "*" // Required for CORS support to work\n },\n body: JSON.stringify({\n message: "Ahoy, My handler here!"\n })\n };\n\n callback(null, response);\n};\n\nconst defaultHandler: Handler = (\n event: any,\n context: Context,\n callback: Callback\n) => {\n const response = {\n statusCode: 200,\n headers: {\n "Access-Control-Allow-Origin": "*" // Required for CORS support to work\n },\n body: JSON.stringify({\n message: "Ahoy, Default handler here!"\n })\n };\n\n callback(null, response);\n};\n\nexport { myHandler, defaultHandler };\n\nRun Code Online (Sandbox Code Playgroud)\n\n我发现与这个问题相关的问题:
\n\nrequestParameters 返回 \xe2\x80\x9c 指定的映射表达式无效: true\xe2\x80\x9d\n
\n\n\n\n感谢您的关注!
\n不知何故,通过(浏览)文档,我也没有完全清楚这一点;我认为这需要 api 网关本身的一些上下文知识。
需要.addMethod3个参数,其中之一是requestParameters你声明你有方法请求参数的地方,即
requestParameters: {
"method.request.querystring.page_tag": true,
"method.request.querystring.language": true,
}
Run Code Online (Sandbox Code Playgroud)
然后,在集成本身中,提供一个requestParameters值,将集成请求的查询字符串参数映射到您设置的方法请求参数,即
requestParameters: {
"integration.request.querystring.page_tag":
"method.request.querystring.page_tag",
"integration.request.querystring.language":
"method.request.querystring.language",
},
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5391 次 |
| 最近记录: |