我有一个简单的lambda(在一个cognito authorizer后面)和一个http事件,我使用httpJsonParser来解析主体,然后我使用一个定制的中间件来验证使用zod的json,最后但同样重要的是我使用httpErrorHandler中间件。
const customhandler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
return {
statusCode: 200,
body: `success
available claims : ${JSON.stringify(event.requestContext.authorizer?.claims)}`
};
};
export const handler = middy(customhandler)
.use(httpJsonBodyParser())
.use(customValidator(SOMESCHEMA))
.use(httpErrorHandler());
customValidator如下所示:
export const customValidator = (schema: ZodSchema): middy.MiddlewareObj<APIGatewayProxyEvent, APIGatewayProxyResult> => {
const before: middy.MiddlewareFn<APIGatewayProxyEvent, APIGatewayProxyResult> = async (
request
): Promise<void> => {
if (request.event.body != null) {
try {
schema.parse(request.event.body);
} catch (e) {
throw new Error("Validation error");
}
}
};
return {
before
};
};
当我删除.use(httpJsonBodyParser())
和.use(httpErroHandler())
时,执行customValidation,并且没有语法错误。
然而,只要我添加了一个(或两个)中间件,不管有没有我的定制中间件,在执行lambda时我都会收到以下错误:
"Runtime.UserCodeSyntaxError: SyntaxError: Unexpected token '??='",
" at _loadUserApp (/var/runtime/UserFunction.js:222:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:300:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:34)",
" at Module._compile (internal/modules/cjs/loader.js:1085:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)",
" at Module.load (internal/modules/cjs/loader.js:950:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:790:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)",
" at internal/main/run_main_module.js:17:47"
我的IDE和eslint并没有抱怨...
正如建议的那样,构建过程可能存在问题,下面是我的tsconfig
文件:
{
"extends": "@tsconfig/node14/tsconfig.json",
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"core/*": [
"../core/src/*"
],
"schema/*": [
"../schema/src/*"
]
}
}
}
没什么特别的。
1条答案
按热度按时间ua4mk5z41#
我升级到了lambda节点版本18.x和serverless 3,解决了这个问题。