Ajv를 사용하는 Node.js의 JSON 스키마 유효성 검사
15200 단어 tutorialwebdevnodejavascript
소개
JavaScript 및 Node.js로 작업하는 경우 프런트엔드 또는 백엔드에서 데이터 유효성 검사를 수행해야 할 필요성을 이미 느꼈을 것입니다.
데이터 유효성 검사를 수행하는 여러 라이브러리와 접근 방식이 있으며 대부분의 경우 추상화를 사용하는 것을 좋아하지만 때때로 JSON 스키마를 정의한 다음 동일한 JSON 스키마를 통해 데이터의 유효성을 검사해야 합니다.
그리고 같은 이유로 오늘 기사에서 우리는 Ajv를 사용할 것입니다. 유효성 검사기 외에도 유효성 검사 기준을 "확장"하는 데 도움이 되는 여러 플러그인이 있습니다.
전제 조건
계속 진행하기 전에 다음 기술에 대한 기본 지식이 있어야 합니다.
시작하기
먼저 프로젝트 폴더를 생성해 보겠습니다.
mkdir node-ajv
cd node-ajv
npm init -y
프로젝트
package.json
에서 다음 속성을 추가합니다.{
"type": "module",
}
이제 프로젝트에 Ajv를 설치해 보겠습니다.
npm install ajv --save
다음 단계는
src/
라는 파일의 schema.js
폴더 안에 있을 JSON 스키마를 생성하는 것입니다.export const authSchema = {
type: "object",
properties: {
username: {
type: "string",
description: "Username of the user",
},
email: {
type: "string",
description: "Email of the user",
},
password: {
type: "string",
description: "Password of the user",
minLength: 8,
maxLength: 24,
},
},
required: ["username", "email", "password"],
additionalProperties: false,
};
그런 다음
validator.js
를 생성할 수 있습니다. 이 파일에는 Ajv 인스턴스와 새 유효성 검사기를 생성할 때마다 재사용할 팩토리가 포함됩니다.import Ajv from "ajv";
import { inspect } from "util";
const ajv = new Ajv({ allErrors: true });
export const validatorFactory = (schema) => {
const validate = ajv.compile(schema);
const verify = (data) => {
const isValid = validate(data);
if (isValid) {
return data;
}
throw new Error(
ajv.errorsText(
validate.errors?.filter((err) => err.keyword !== "if"),
{ dataVar: "schemaValidation" } + "\n\n" + inspect(data)
)
);
};
return { schema, verify };
};
알다시피
validatorFactory()
함수는 schema
(JSON 스키마에 해당) 인수를 받아 다음 두 가지 속성을 반환합니다.schema
- 함수 인수에 전달된 스키마의 "복사본"(원하는 경우 전체 복사를 수행할 수 있음)verify
- 유효성을 검사하려는 데이터를 인수에서 수신하고 동일한 데이터가 유효하면 유효성 검사가 성공하여 반환되며, 그렇지 않으면 오류가 발생합니다이 문서를 쉽게 테스트할 수 있도록 간단한 API를 만들고 먼저 종속성을 설치합니다.
npm install koa @koa/router koa-body --save
그런 다음 기본 API를 만듭니다.
import Koa from "koa";
import Router from "@koa/router";
import koaBody from "koa-body";
const app = new Koa();
const router = new Router();
app.use(koaBody());
router.post("/", async (ctx) => {
ctx.body = "Hello, World";
});
app.use(router.routes());
app.listen(3000);
마지막으로 생성된 스키마와 유효성 검사 팩토리를 가져온 다음
authValidation
라는 유효성 검사기를 생성하고 http 요청 본문에서 데이터의 유효성을 검사합니다. 이 방법:import Koa from "koa";
import Router from "@koa/router";
import koaBody from "koa-body";
import { validatorFactory } from "./validator.js"; // 👈 added this
import { authSchema } from "./schema.js"; // 👈 added this
const authValidation = validatorFactory(authSchema); // 👈 added this
const app = new Koa();
const router = new Router();
app.use(koaBody());
// 👇 changes have been made here
router.post("/", async (ctx) => {
const body = ctx.request.body;
const data = authValidation.verify(body);
ctx.body = { data };
});
app.use(router.routes());
app.listen(3000);
이제 다음과 같이
POST
에서 http://localhost:3000
로 http 요청을 할 수 있습니다.{
"email": "[email protected]",
"username": "random",
"password": "randomPaswword"
}
결론
늘 그렇듯이 기사가 마음에 드셨기를 바라며 기존 프로젝트에 도움이 되었거나 단순히 사용해 보고 싶으셨기를 바랍니다.
기사에서 잘못된 부분을 발견했다면 댓글로 알려주시면 수정하겠습니다. 마치기 전에 이 기사의 소스 코드에 액세스하려면 github 저장소에 대한 링크here를 남겨둡니다.
Reference
이 문제에 관하여(Ajv를 사용하는 Node.js의 JSON 스키마 유효성 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/franciscomendes10866/json-schema-validation-in-nodejs-using-ajv-53jd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)