Error 가 발생한 상황
content 에 1000 글자 이상의 문자를 입력 했을때 발생
출력된 Error 내용
ERROR message
{
"name": "SequelizeDatabaseError",
"parent": {
"code": "ER_DATA_TOO_LONG",
"errno": 1406,
"sqlState": "22001",
"sqlMessage": "Data too long for column 'content' at row 1",
}
}
예상한 Error 위치
table 을 생성할 때 설정한 content에 입력할 수 있는 데이터(글자)의 길이를 초과
// model-Post.js
content: { type: DataTypes.STRING}
Sequelize 에서 STRING == VARCHAR
그래서 65535 글자 수를 가질 수있다고 생각했는데 에러 발생
시도 1 : TEXT 사용
content:{type:DataType.TEXT}
--> 긴 문장이 담아지는 것은 성공
!! 하지만 1000 글자를 넘겼을 경우 서버가 중단된다. --> res.send() 를 호출한 뒤 또 호출하여서 발생
해결
1. data가 길어서 에러가 뜨는 상황 : content:{type:DataType.TEXT} 로 변경하여 해결
2. 유효성 확인을 하는 코드가 res.send() 를 중복해서 호출하여 생기는 상황
router.post("/", async (req, res)=>{
const {title, content} = req.body;
try{
const newPost = await sequelize.transaction(async ()=>{
// -------- res.send 중복 유발 --------------------
if(title.length > 15){
return res.status(400).send("Title must be under 15 characters.");
}
if(content.length > 1000){
return res.status(400).send("Content must be under 1000 characters.");
}
//---------------------------------------------
const post = await Post.create({
title,
content
});
console.log("A post is created")
return post;
})
res.status(200).send(newPost);
}catch (err){
console.error("Error while create a post");
res.status(500).send(err);
}
})
router.post("/", async (req, res)=>{
const {title, content} = req.body;
if(title.length > 15){
return res.status(400).send("Title must be under 15 characters.");
}
if(content.length > 1000){
return res.status(400).send("Content must be under 1000 characters.");
}
try{
const newPost = await sequelize.transaction(async ()=>{
const post = await Post.create({
title,
content
});
console.log("A post is created")
return post;
})
res.status(200).send(newPost);
}catch (err){
console.error("Error while create a post");
res.status(500).send(err);
}
})
router.post("/", async (req, res)=>{
const {title, content} = req.body;
try{
if(title.length > 15){
return res.status(400).send("Title must be under 15 characters.");
}else if(content.length > 1000){
return res.status(400).send("Content must be under 1000 characters.");
}
const newPost = await sequelize.transaction(async ()=>{
const post = await Post.create({
title,
content
});
return post;
})
res.status(200).send(newPost);
}catch (err){
console.error("Error while create a post");
res.status(500).send(err);
}
})