Aws lambda middy/validator:如何为JSON字符串编写模式

Aws lambda middy/validator:如何为JSON字符串编写模式,aws-lambda,middleware,jsonschema,serverless-framework,Aws Lambda,Middleware,Jsonschema,Serverless Framework,我试图在无服务器框架中验证RESTAPI resp格式。使用middy/validator 输出模式 const outputSchema = { required: ['body', 'statusCode'], properties: { body: { type: 'object' }, statusCode: { type: 'number' } } } 在API中 const handler = async (eve

我试图在无服务器框架中验证RESTAPI resp格式。使用middy/validator

输出模式

const outputSchema = {
  required: ['body', 'statusCode'],
  properties: {
    body: {
      type: 'object'
    },
    statusCode: {
      type: 'number'
    }
  }
}
在API中

const handler = async (event, context) => {
   ...
   return {
        statusCode: 200,
        body: JSON.stringify(resp)
      };
}
...

export const handler = middy(handler).use(
  validator({ outputSchema: outputSchema })
);
我收到了来自验证的错误,我可以看到在API中,
body
是一个JSON字符串,但在模式中,
body
是一个对象

如何编写模式来验证JSON字符串的结构


非常感谢您的任何建议。

您发送的字符串化响应将不适用于架构,但该响应并非特定于serverless,而是api网关代理所需的响应。尝试返回未字符串化的结果,并使用另一个中间件格式化响应。退房或者编写自己的来处理最终格式。

在定义的架构中添加“type”属性,并将其设置为strict type。 就你而言:

const schema{
type: 'object' //this!
required: ['body', 'statusCode'],
.....
}

为我工作。

我不知道为什么要字符串化resp对象,因为这会使事情变得更困难。我想您可以对字符串化的JSON应用一些正则表达式检查:这是无服务器框架的要求,您必须再次对其进行重新解析以验证它。