강의를토대로 게시판 작성을 실습중인데요! ㅠ ㅠ
게시판 작성을 누르면 "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