Hilzu / express-openapi-validate

Express middleware to validate requests based on an OpenAPI 3 document
Apache License 2.0
75 stars 12 forks source link

Warning on nodeJs console "schema $id ignored..." #69

Closed blaisn closed 3 years ago

blaisn commented 3 years ago

I use express-openapi-validate v0.5.1 and since a while (cannot tell exactly), I get a warning in node console:

schema $id ignored https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js
meta-schema not available

This warning is issued while calling the validator with a single option to ignore the OAS spec V3 keyword:

const { OpenApiValidator } = require("express-openapi-validate");
const validator = new OpenApiValidator(openApiDocument, {
    ajvOptions: {
        nullable: true,
    },
});

The document could be any document. To reproduce the problem, we can use the PetStore document attached to the end of this issue. The url "https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js" is no longer available on ajv's Github repo. The problem could be probably solved by upgrading the ajv version in your package.

Thanks!

PetStore document:

openApiDocument = {
    openapi: "3.0.0",
    info: {
        version: "3.0.0",
        title: "Swagger Petstore",
    },
    servers: [
        {
            url: "http://petstore.swagger.io/v1",
        },
    ],
    paths: {
        "/pets": {
            get: {
                summary: "List all pets",
                operationId: "listPets",
                tags: ["pets"],
                parameters: [
                    {
                        name: "limit",
                        in: "query",
                        description: "How many items to return at one time (max 100)",
                        required: false,
                        schema: {
                            type: "integer",
                            format: "int32",
                        },
                    },
                ],
                responses: {
                    200: {
                        description: "A paged array of pets",
                        headers: {
                            "x-next": {
                                description: "A link to the next page of responses",
                                schema: {
                                    type: "string",
                                },
                            },
                        },
                        content: {
                            "application/json": {
                                schema: {
                                    $ref: "#/components/schemas/Pets",
                                },
                            },
                        },
                    },
                    default: {
                        description: "unexpected error",
                        content: {
                            "application/json": {
                                schema: {
                                    $ref: "#/components/schemas/Error",
                                },
                            },
                        },
                    },
                },
            },
            post: {
                summary: "Create a pet",
                operationId: "createPets",
                tags: ["pets"],
                responses: {
                    201: {
                        description: "Null response",
                    },
                    default: {
                        description: "unexpected error",
                        content: {
                            "application/json": {
                                schema: {
                                    $ref: "#/components/schemas/Error",
                                },
                            },
                        },
                    },
                },
            },
        },
        "/pets/{petId}": {
            get: {
                summary: "Info for a specific pet",
                operationId: "showPetById",
                tags: ["pets"],
                parameters: [
                    {
                        name: "petId",
                        in: "path",
                        required: true,
                        description: "The id of the pet to retrieve",
                        schema: {
                            type: "string",
                        },
                    },
                ],
                responses: {
                    200: {
                        description: "Expected response to a valid request",
                        content: {
                            "application/json": {
                                schema: {
                                    $ref: "#/components/schemas/Pet",
                                },
                            },
                        },
                    },
                    default: {
                        description: "unexpected error",
                        content: {
                            "application/json": {
                                schema: {
                                    $ref: "#/components/schemas/Error",
                                },
                            },
                        },
                    },
                },
            },
        },
    },
    components: {
        schemas: {
            Pet: {
                type: "object",
                required: ["id", "name"],
                properties: {
                    id: {
                        type: "integer",
                        format: "int64",
                    },
                    name: {
                        type: "string",
                    },
                    tag: {
                        type: "string",
                    },
                },
            },
            Pets: {
                type: "array",
                items: {
                    $ref: "#/components/schemas/Pet",
                },
            },
            Error: {
                type: "object",
                required: ["code", "message"],
                properties: {
                    code: {
                        type: "integer",
                        format: "int32",
                    },
                    message: {
                        type: "string",
                    },
                },
            },
        },
    },
};
Hilzu commented 3 years ago

This should now be fixed with the latest v0.6.0 release. Is it working for you @blaisn?

blaisn commented 3 years ago

Yes, problem solved after upgrade to 0.6.1 Thanks.