인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

[리뉴얼] React로 NodeBird SNS 만들기

해시태그 등록하기

해쉬태그 등록 오류

작성

·

225

0

이번 강의에 해쉬 태그 등록을 위한 코드들
const hashtags = ~~~ 부분과
if(hashtags) {
}
요거를 추가하면은 500에러가 떠요.
왜 이럴까요?
const express = require('express')
const multer = require('multer')
const path = require('path')
const fs = require('fs')

const { PostImageCommentUserHashtag } = require('../models')
const { isLoggedIn } = require('./middlewares')

const router = express.Router()

try {
  fs.accessSync('uploads')
catch(error) {
  console.log('uploads 폴더가 없으므로 생성합니다.')
  fs.mkdirSync('uploads')
}

// multer 셋팅
const upload = multer({
  storage: multer.diskStorage({
    destination(reqfiledone) {
      done(null'uploads')
    },
    filename(reqfiledone) {
      const ext = path.extname(file.originalname// 확장자 추출(.png)
      const basename = path.basename(file.originalnameext// 이름 추출(제로초)
      done(nullbasename + '_' + new Date().getTime() + ext// 이름_1518123131.png
    },
  }),
  limits: { fileSize: 20 * 1024 * 1024 }, // 20MB
})

// 게시글 작성
router.post('/'isLoggedInupload.none(), async (reqresnext=> {
  try {
    // const hashtags = req.body.content.math(/#[^\s#]+/g)
    const post = await Post.create({
      content: req.body.content,
      UserId: req.user.id,
    })

    // if(hashtags) {
    //   const result = await Promise.all(hashtags.map((tag) => Hashtag.findOrCreate({ 
    //     where: { name: tag.slice(1).toLowerCase() },
    //   }))); // 결과 [[노드, true], [리액트, true]]
    //   await post.addHashtags(result.map((v) => v[0]));
    // }

    if(req.body.image) {
      if(Array.isArray(req.body.image)) { // 이미지 여러개면 image: [경로.png, 경로.png]
        const images = await Promise.all(req.body.image.map((image=> Image.create({ src: image })))
        await post.addImages(images)
      } else {  // 이미지 하나만 올리면 image: 경로.png
        const image = await Image.create({ src: req.body.image })
        await post.addImages(image)
      }
    }

    const fullPost = await Post.findOne({
      where: { id: post.id },
      include: [{
        model: Image,
      }, {
        model: Comment,
        include: [{
          model: User,  // 댓글 작성자
          attributes: ['id''nickname'],
        }]
      }, {
        model: User,   // 게시글 작성자
        attributes: ['id''nickname'],
      }, {
        model: User,   // 좋아요 누른 사람
        as: 'Likers',
        attributes: ['id'],
      }]
    })
    res.status(201).json(fullPost)
  } catch(error) {
    console.error(error)
    next(error)
  }
})

router.post('/:postId/comment'isLoggedInasync (reqresnext=> {
  try {
    const post = await Post.findOne({
      where: { id: req.params.postId }
    })
    if(!post) {  // 게시글 존재하는지 확인
      return res.status(403).send('존재하지 않는 게시글입니다.')
    }
    const comment = await Comment.create({
      content: req.body.content,
      PostId: parseInt(req.params.postId),
      UserId: req.user.id,
    })
    const fullComment = await Comment.findOne({
      where: { id: comment.id },
      include: [{
        model: User,
        attributes: ['id''nickname']
      }]
    })
    res.status(201).json(fullComment)
  } catch(error) {
    console.error(error)
    next(error)
  }
})

// 좋아요 누르기
router.patch('/:postId/like'isLoggedInasync (reqresnext=> { // PATCH /post/1/like
  try {
    const post = await Post.findOne({ where: { id: req.params.postId }})
    if(!post) {
      return res.status(403).send('게시글이 존재하지 않습니다.')
    }
    await post.addLikers(req.user.id)
    res.json({ PostId: post.idUserId: req.user.id })
  } catch(error) {
    console.error(error)
    next(error)
  }
})

// 좋아요 취소
router.delete('/:postId/like'isLoggedInasync (reqresnext=> { // DELETE /post/1/like
  try {
    const post = await Post.findOne({ where: { id: req.params.postId }})
    if(!post) {
      return res.status(403).send('게시글이 존재하지 않습니다.')
    }
    await post.removeLikers(req.user.id)
    res.json({ PostId: post.idUserId: req.user.id })
  } catch(error) {
    console.error(error)
    next(error)
  }
})

// 게시글 삭제
router.delete('/:postId'isLoggedInasync (reqresnext=> {  // DELETE /post/10
  try {
    await Post.destroy({
      where: { 
        id: req.params.postId,
        UserId: req.user.id,
      },
    })
    res.status(200).json({ PostId: parseInt(req.params.postId10) })
  } catch(error) {
    console.error(error)
    next(error)
  }
})

// 이미지 업로드
router.post('/images'isLoggedInupload.array('image'), (reqresnext=> {
  console.log(req.files)
  res.json(req.files.map((v=> v.filename))
})

module.exports = router

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

에러 메시지를 보여주세요. 서버쪽에 있습니다.

앗 해결했습니다! 역시 안될 때는 딴거하다가 나중에 다시 봐야하는 것 같아요.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기