사용자가 입력한 데이터가 유효한지 검사하는 유효성 검사 라이브러리
> npm i joi
const Joi = require('joi')
const express = require("express");
const Joi = require("joi");
const app = express();
app.get("/api/user/:id", async (req, res) => {
const { id } = req.params;
// 규칙을 정해준다.
const schema = Joi.number().min(100).require();
try {
// 검사시작
// validateAsync 는 비동기적인 체크가 가능하기 때문에 절차실행에 있어 좋다.
await schema.validateAsync(id);
} catch (e) {
// 유효성 검사 에러
return res.status(400).json({ code: 400, message: e.message })
}
res.json({ code: 200 })
})
// { number, string }
Joi.object({
number: Joi.number()
string: Joi.string()
})
// Array<number>
Joi.array().items(Joi.number())
// Array<number> number > 10 and number < 20
Joi.array().items(Joi.number().min(10).max(20))
// a < b
Joi.object({
a: Joi.number().max(Joi.ref('b'))
b: Joi.number()
})
// ['a', 'a'] (x) 즉, 중복값 허용 안됨
Joi.array().items(Joi.string()).unique()
// 다른 배열에 있는 수와 같으면 안됨
const a = [1,2,3,4]
const b = [1,2]
Joi.object({
a: Joi.array().items(Joi.number().invalid(...b)),
b: Joi.array().items(Joi.number())
})
/* 1,2 가 중복되므로 에러 발생 */
const Joi = require('joi');
// validate할 schema 정의
const schema = Joi.object().keys({
username: Joi.string().min(3).max(30).required(),
birthyear: Joi.number().integer().min(1900).max(2018),
});
// validate할 object
const user = {
username: 'username1',
};
// validate
const {error, value} = Joi.validate(user, schema);
console.log(error); // null
console.log(value); // {username: "username1"}
입력인 user가 미리 정의된 schema와 일치하는지를 확인한다.
schema는 다음과 같이 정의되었다.
const Joi = require('joi');
const schema = Joi.object().keys({
username: Joi.string().min(3).max(30).required(),
birthyear: Joi.number().integer().min(1900).max(2023),
});
const user = {
username: 'username1',
birthyear: 2025,
};
const {error, value} = Joi.validate(user, schema);
console.log(error); // Error: child "birthyear" fails because ["birthyear" must be less than or equal to 2023]
console.log(value); // {username: "username1", birthyear: 2025}