1

我正在使用 ajv 和这个@middy/validator中间件为无服务器端点编写验证模式。文档中有一条说明,中间件可以使用外部插件。但不清楚如何应用它们,也没有例子。我想ajv-errors为自定义错误消息使用插件,https://github.com/ajv-validator/ajv-errors

请给我一个关于如何应用外部插件的链接或给我一个例子。提前致谢!

4

1 回答 1

0

我不熟悉ajv,但我使用过middy/validator。

假设您有一个 lambda 函数,它需要一个 JSON 主体并具有下一个简单代码(只返回接收到的 JSON 主体):

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

我的建议(以及对我有用的)如下:

  1. 使用您的中间件需要的组件创建一个中间件文件(即:middleware.js)。如果您需要使用 middy/validator,您还需要添加 middy/http-json-body-parser,以便它将 JSON 正文解析为验证器可以检查的对象。该文件可能如下所示:

import middy from '@middy/core';
import httpEventNormalizer from '@middy/http-event-normalizer';
import jsonBodyParser from '@middy/http-json-body-parser';
import httpErrorHandler from '@middy/http-error-handler';

export default handler => middy(handler)
.use([
    httpEventNormalizer(),
    jsonBodyParser(),
    httpErrorHandler()
]);
  1. 现在将此文件导入您要使用验证器的 lambda 函数并用它“包装”您的处理程序。lambda 函数现在应该如下所示:

import middleware from '../lib/middleware'
import validator from '@middy/validator';
import yourSchema from '../lib/yourSchema';


async function test(event, context) {
    return {
        statusCode: 200,
        body: JSON.stringify(event.body),
    };
}

export const handler = middleware(test)
    .use(validator({inputSchema: yourSchema}));

其中“yourSchema”是您构建的验证模式。

于 2021-08-02T15:07:33.257 回答