validation
이메일 주소 양식은 test@example.com인데, 회원가입 할 때 이메일 양식이 일치하지 않으면 유효하지 않은 이메일이므로 회원 가입을 막을 수 있음
이메일 양식이 일치하지 않는다
UX측면(사용자 경험)에서 사용자에게 편의를 주기 위함아래의 예제는 학생 이름을 입력 받아 배열에 넣어 모든 학생의 정보를 보여주는 api입니다.
app.post("/api/students", (req, res) => {
let { name } = req.body;
let student = {
id: students.length + 1,
name: name,
};
students.push(student);
res.send(students);
});
문제점은 name이라는 변수에 대해 유효성 검사를 할 수 없음
app.post("/api/students", (req, res) => {
let { name } = req.body;
if (!name) {
res.status(400).send("Name is required...");
return;
}
if (name.length <= 3) {
res.status(400).send("name must be more than 3 char long");
return;
}
let student = {
id: students.length + 1,
name: name,
};
students.push(student);
res.send(students);
});
문제점은 많은 양의 변수가 들어올 시 체크 해줘야 할 것이 많아서 코드량이 늘어남
install
npm install @hapi/joi
const schema = Joi.object({
name: Joi.string().min(3).max(15).required(),
});
app.post("/api/students", (req, res) => {
let { name } = req.body;
let result = schema.validate(req.body);
if (result.error) {
res.status(400).send(result.error.details[0].message);
return;
}
let student = {
id: students.length + 1,
name: name,
};
students.push(student);
res.send(students);
});
schema 설정만 잘해준다면 여러 api에 대해서 유효성 검사가 편리할 것 같다.