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

terecal님의 프로필 이미지
terecal

작성한 질문수

React로 NodeBird SNS 만들기

6-11. 폼데이터로 게시글 올리기

폼데이터로 포스팅 api 라우터 질문이여

작성

·

104

0


upload.none()은
뮬터를 이용해 프론트에서 서버로 넘긴 폼데이터를

    const onSubmitForm = useCallback((e) => {
        e.preventDefault();
        
        if (!text || !text.trim()) {
            return alert('게시글을 작성하세요.');
        }   
        
        const formData = new FormData();
        imagePaths.forEach((i) => {
            formData.append('image', i);

        });
        formData.append('content', text);       
        
        dispatch({
            type: ADD_POST_REQUEST,
            data: formData,
        });
    }, [text, imagePaths]);​


req.body에 세팅하기 위한 미들웨어 로직이다

이렇게 이해하면 되나여?

또 db에서 include 로직은

        const fullPost = await db.Post.findOne({
            where:{id:newPost.id},
            include:[{
                model:db.User,
            }, {
                model: db.Image,
            }],
       });
인데 user는
create 할때
        const newPost = await db.Post.create({
            content:req.body.content,
            UserId:req.user.id
       });

이렇게 저장해서 포스트 테이블내의 정보이기 때문에

iinclude 모델 이름 이러면서 그냥 그 id로 user 정보를 검색해서 가져오는것 그렇게 생각했는데여
Image는 같은 테이블에 없는데 어떻게 이미지 데이터를 가져오는거져?
이에 대해 알려주시면 감사여 ~!~!

전체 코드
```
router.post(''isLoggedInupload.none(), async (reqresnext=> {
    // console.log("req.body : " , req.body);
    try {
        const hashtags = req.body.content.match(/#[^\s]+/g);
        const newPost = await db.Post.create({
            content:req.body.content,
            UserId:req.user.id
        });
        
        if (hashtags) {
            const result = await Promise.all(hashtags.map(tag => db.Hashtag.findOrCreate({
                where: { name: tag.slice(1).toLowerCase() },
            })));
            console.log("result : "result);
            await newPost.addHashtags(result.map(r => r[0]));
        }
        
        if (req.body.image) { // 이미지 주소를 여러개 올리면 image: [주소1, 주소2]
            if (Array.isArray(req.body.image)) {
                const images = await Promise.all(req.body.image.map((image=> {
                    return db.Image.create({ src: image });
                }));
                await newPost.addImages(images);
            } else { // 이미지를 하나만 올리면 image: 주소1
                const image = await db.Image.create({ src: req.body.image });
                await newPost.addImage(image);
            }
        }       
        const fullPost = await db.Post.findOne({
            where:{id:newPost.id},
            include:[{
                model:db.User,
            }, {
                model: db.Image,
            }],
        });
        res.json(fullPost);
    } catch (e) {
        console.error(e);
        next(e);
    }
});
```

답변 1

0

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

네네 none은 폼데이터를 업로드하지만 이미지나 비디오같은 파일은 없을 때 합니다.

Image 테이블에 postId가 들어있을 겁니다. 그 아이디를 보고 post테이블과 합쳐줍니다. 쉽게 생각하려면 여러 개인 쪽에서 한 개인 쪽의 아이디를 관리한다고 보시면 됩니다.

terecal님의 프로필 이미지
terecal

작성한 질문수

질문하기