typescript 使用中间件和middy时出现语法错误-但没有语法错误-并且自定义中间件可以工作

toiithl6  于 2023-02-20  发布在  TypeScript
关注(0)|答案(1)|浏览(110)

我有一个简单的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/*"
      ]
    }
  }
}

没什么特别的。

ua4mk5z4

ua4mk5z41#

我升级到了lambda节点版本18.x和serverless 3,解决了这个问题。

相关问题