Field 'content' doesn't have a default value
해결된 질문
575
0
강의를토대로 게시판 작성을 실습중인데요! ㅠ ㅠ
게시판 작성을 누르면 "Field 'content' doesn't have a default value"라는 에러가 발생합니다.

검색해보니 mysql 특정 버전에서는 디폴트값이 없으면 에러가 날수있다고해서 마이그레이션을 작성해주었습니다.
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
queryInterface.changeColumn("Posts", "content", {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: ""
});
},
down: (queryInterface, Sequelize) => {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.dropTable('users');
*/
}
};
명령프로세서에서 실행해주면 다음과 같이 나옵니다.

강의와 똑같은 환경과 비슷한 코드를 작성했는데 왜 에러가 나는걸까요??..
postForm.js
import React, { useCallback, useState, useEffect } from "react";
import styled from "styled-components";
import Link from "next/link";
import { useSelector, useDispatch } from "react-redux";
import { media } from "../components/StyleUtils";
import { ADD_POST_REQUEST } from "../reducers/post";
const postForm = () => {
const dispatch = useDispatch();
const [titleText, setTitleText] = useState();
const [text, setText] = useState();
const { imagePaths, isAddingPost, postAdded } = useSelector(
state => state.post
);
const onSubmitForm = useCallback(
e => {
e.preventDefault();
if (!titleText || !titleText.trim()) {
return alert("제목을 작성하세요.");
}
if (!text || !text.trim()) {
return alert("게시글을 작성하세요.");
}
dispatch({
type: ADD_POST_REQUEST,
data: {
title: titleText.trim(),
content: text.trim()
}
});
},
[titleText, text]
);
const onChangeTitleText = useCallback(e => {
setTitleText(e.target.value);
}, []);
const onChangeText = useCallback(e => {
setText(e.target.value);
}, []);
return (
<Container>
<PageTitle>게시글 작성</PageTitle>
<Form onSubmit={onSubmitForm} enctype="multipart/form-data">
<Label htmlFor="title">제목</Label>
<Title
id="title"
placeholder="제목을 입력해주세요"
value={titleText}
onChange={onChangeTitleText}
/>
<Label htmlFor="content">내용</Label>
<Content
id="content"
placeholder="내용을 입력해주세요"
value={text}
onChange={onChangeText}
/>
<ButtonBox>
<Button type="primary" htmlType="submit" style={{ marginRight: 10 }}>
작성하기
</Button>
<Link href="/board">
<a>
<ButtonSecond>목록으로</ButtonSecond>
</a>
</Link>
</ButtonBox>
</Form>
</Container>
);
};
export default postForm;
models => post
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define(
"Post", // 테이블명은 posts
{
title: {
type: DataTypes.STRING(20),
allowNull: false
}
},
{
views: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0
}
},
{
content: {
type: DataTypes.TEXT, // 매우 긴 글
allowNull: false,
defaultValue: ""
}
},
{
charset: "utf8mb4", // 한글+이모티콘
collate: "utf8mb4_general_ci"
}
);
Post.associate = db => {
db.Post.belongsTo(db.User); // 테이블에 UserId 컬럼이 생겨요
db.Post.hasMany(db.Comment);
db.Post.hasMany(db.Image);
db.Post.belongsToMany(db.User, { through: "Like", as: "Likers" });
};
return Post;
};
routes=>post.js
const express = require("express");
const db = require("../models");
const router = express.Router();
router.post("/", async (req, res, next) => {
try {
const newPost = await db.Post.create({
title: req.body.title,
content: req.body.content,
UserId: req.user.id
});
return res.json(newPost);
} catch (e) {
console.error(e);
next(e);
}
});
router.post("/images", (req, res) => {});
router.get("/:id/comments", async (req, res, next) => {});
module.exports = router;
.
답변 6
1
네 마이그레이션 끝에는 항상 return 붙이셔야 합니다.
1
그냥 테이블 싹다 삭제하고 다시 만들어버릴까요?.. 실무에서는 추천하지않는 방식이라고 하셨었는데 지금은 실무가아니니깐요ㅠ.
0
"use strict";
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.changeColumn("Posts", "content", {
type: Sequelize.TEXT,
allowNull: false,
defaultValue: ""
});
},
down: (queryInterface, Sequelize) => {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.dropTable('users');
*/
}
};
.해결했습니다.
제가 한 실수는 다음과 같았어요
1. type 실수 (Sequelize를 DataTypes라고적었었음)
2. 에로우 펑션을 사용한것..
2번은 정확한건아닌데 function으로 고치고 return을 써주고 하니 잘 되네요
여기에 질문 안달았으면 데이터타입 다르게쓴거조차 찾지못했을껀데 감사합니다!
0
쌤 혹시 계신가요?
제 실수였네요, 데이터타입을 type: Sequelize.TEXT 로 정정했습니다. 그런데 이번엔
Migration 20200309075630-unnamed-migration.js (or wrapper) didn't return a promise 라는 에러 문구가뜹니다 ㅠ
후.. 구글링해서 npm install -g vapid-cli 도 설치해봤지만 여전히 그대로입니다. 다음은 제 마이그레이션입니다
"use strict";
module.exports = {
up: (queryInterface, Sequelize) => {
queryInterface.changeColumn("Posts", "content", {
type: Sequelize.TEXT,
allowNull: false,
defaultValue: ""
});
},
down: (queryInterface, Sequelize) => {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.dropTable('users');
*/
}
};
0
일단 unnamed-migration 파일을 보시면 DataTypes를 변수가 선언이 안 되어있습니다. 매개변수쪽을 확인해보세요.
0
+ 에러는나지만 리퀘스트 페이로드를 살펴보면 데이터는 잘 들어가는것 같습니다.

next 10 이상에서는 redux dev tool 구동이 안되나요?
세션 갱신 문의 건
배포 진행 후 Highlight updates components render 표시
똑같은 기능을 하는 테이블
관계형
프론트 서버를 이용하지 않는경우
인피니트 스크롤링 사용시 오류
계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.
req.user가 언제 생성되나요??
Cannot read property 'id' of null 에러
리트윗한 게시글 불러오는 sequelize
result.data에서 images인 이유
takeLatest에 대한 질문입니다.
프론트에서 express를 사용하지 않을때 동적라우팅
getInitialProps가 클라이언트에서 수행되는 이유?
리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.
스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다
할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)
nodejs mvc 패턴
사용하고 보니, 람다 구성이 궁금합니다!
제로초님
새로고침 로그인 풀림 문제.
안녕하세요. 강의 너무 감사합니다
제로초님