2022-04-12 T.I.L

정종훈·2022년 5월 18일
0

first project

목록 보기
8/10

2022/04/12

컨트롤러/user/mypage 작업중임.

  • 회원정보 수정을 하는데 hashNewpassword 도 되고

비밀번호 수정도 되지만 그것을 어떻게 리턴하는지 모르겠음.

해결 ⇒ nweUserInfo로 하지말고 그냥 await써서 넘겨줌

컨트롤러/컨텐츠/root.js

  • 문제) 컨텐츠 작성 기능을 만들려고했음.

TypeError: Content.create is not a function

시퀄라이즈 이상인가... 뭔지 모르겠음..

⇒ 해결 시퀄라이즈 테이블 불러올때 Content ⇒ { Content } 로 바꿔줌.

  • 문제) 게시물을 중복작성하면 이상함

sqlMessage: "Duplicate entry '5' for key 'Contents.user_id'",

⇒ 해결 : 시퀄라이즈 db구성에서 Contents.user_id 부분이 unique 키로 되어있는것을 지워줌.

회원탈퇴 구현 : 컨트롤러/유저/:id.js

  • 문제 )TypeError: Cannot read properties of undefined (reading 'destroy')

왜 destory가 안되지 ⇒ Users테이블에서 User로 시퀄라이즈 문법 바꿈!

구현완료)

질문 ) 토큰의 유효기간을 만료로 하는것보다 좋은 방법이 있을까 일단 패스

그다음 컨텐츠 작성하자! : 컨트롤러/컨텐츠/컨텐츠작성

똑같은 방법으로 작성하는데 컨트롤러의 폴더가 root로 갈린다..

질문) 좀더 옳은 방법이 없을까? 5/18 무슨말이야 내 자신아?!!

데이터 베이스에 잘들어옴.

그래서 내 레포로 푸쉬하려는데

문제)fatal: 'https://github.com/mathisveryfun/beehappy.git/'에 접근할 수 없습니다: Could not resolve host: github.com

컨텐츠 조회기능 구현!! : 컨트롤러/컨텐츠/컨텐츠 조회

로직) : 유저 파람스 받아옴 ⇒ 조회함 ⇒ 응답함

컨텐츠 수정기능 구현: 컨트롤러/컨텐츠/컨텐츠 수정

로직상상도) : 로그인 인증. (userInfo에는 로그인 유저가 있음)

⇒ 로그인 유저(id)와 현재 게시물의 user_num이 같은지 봐야함.

⇒ 다르면 인증거부

⇒ 같으면 수정후 반환

  • 문제)

기존 컨텐츠정보를 contentInfo로 받아오고

그것을 Content.update를 써서 newContents 로 받아오려 하는데

newContents 변수에 할당되어있는것은 콘솔창에 보면 [1] 밖에 없음

어떻게 할수있는 방법은 없을까...

const userAuthen = require('../authenication/userAuthen')
const { Content } = require('../../models');

module.exports = async (req, res) => {
  try {
    console.log('7')
  const userInfo = await userAuthen(req, res)
  const { title, contents } = req.body;
  console.log('8')
  const newContent = await Content.create({
    title,
    user_id: userInfo.dataValues.id,
    contents,
    content_like_count: 0,      
  })
  console.log('9')
  // updatedAt 지움
  delete newContent.dataValues.updatedAt;

  res.status(200).json({
    data: newContent.dataValues,
    message: "create content"
  })
  } catch (e) {
    console.error(e);
    return res.status(500).json({
      data: null,
      message: 'Server error'
    })
  } 
}
  • 해결 ⇒ 걍함..

컨텐츠수정 로직:

인증 ㄱㄱ ⇒ 파람으로 받은 컨텐츠 아이디의 게시글 주인(user_id)와 현재 토큰의 유저가 같은지 확인

⇒ 수정실시!

삭제도 마찬가지!!

자랑스럽다!!!

자 그럼 이제 코멘트 구현으로 ㄱㄱㄱ 해봅시다!!

컨트롤러/content/comment

경로 content/:content_id/comment

댓글 작성 로직:

  1. 토큰의 인증을 통해 유저 정보 userInfo 를 받아온다.
  2. 인증이 제대로 되면
  3. 게시물을 저장함.

userInfo는 댓글 작성자가 된다.

이제 어떤게시물의 댓글을 다는 지를 알아와야한다.

그것은 params로 받아오는 content_id로 판단한다.

req.body에는 댓글내용(comments) 꽃 종류(item_id) 가 있다.

그러면 우리는어디에 데이터를 저장하는가?

Comment테이블에 저장한다.

어떻게 Comment테이블에 저장하는가?

Comment테이블의 내용을 보면

  • user_id는 userInfo의 user_id (작성자)이다.

  • item_id는 req.body에 있다.

  • comments도 req.body에 있다.

  • comment_like_count는 서버에서 알아서 0으로줄거임.

  • content_id는 Contents(게시글)의 id로 종속 되어야한다.

  • 문제) SyntaxError: Unexpected token } in JSON at position 30

14번쨰줄을 시작하는데 만약

req.body에 정상적으로 담겨있지 않다면 서버오류가 남

⇒ 해결.. postman으로 보낼떄 JSON형식을 지키지 않음..

  • 문제) parent: Error: Cannot add or update a child row: a foreign key constraint fails

뭔 개소린지는 모르겠지만 저기 item_id에 문제가 있는걸로 보아.

내가 지금 댓글 작성을 할떄 item_id를 3으로 넣었고 지금 관계가 item_id는 items테이블의 id를 따르는데

정작

item 테이블에는 아무것도 없어서 참조를 못하는거임.

우선 더미 데이터를 item 테이블에 넣어주어야 겠음 ⇒ sequlize seeder 어떻게 만들지?

잘 만든것같은데

  • 문제) ERROR: Validation error

sequelize db:seed:all --debug 로 에러 왜 생겼는지 찾아봄

User.id 는 프라이머리 키인데 두번 시더로 넣어짐...

⇒ 해결 : 시더

sequelize db:seed:undo:all

로 복구시키고 다시 집어 넣음!

자 다시 돌아가서 코멘트 작성 해보자!

profile
괴발개발자에서 개발자로 향해보자

0개의 댓글