ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 작업일지3
    Project 2021. 4. 16. 09:34
    • url로 보내달라고 한 말에 의미를 잘 모르겠어서
    • 다른 프론트엔드분을 붙잡고 물어봤다(팀원에게는 이미 많이 물어봐도 모르겠어서)
    • 그런데 프론트(리액트)에서는 파일의 경로로 넘겨주면
    • 사용할 수 없다고 한다. 
    • 그래서 파일을 내려줄 때 웹상에서 클릭하면 이미지파일이 뜨는식으로 보내줘야한다고 한다.
    • 그래서 처음에는 multer의 기능을 사용해 destination을 서버배포주소로 했더니
    • 원하는 결과물을 가질 수 있었다.
    • 그런데 백엔드 팀원이 모듈화하셨다고 해서 그냥 내거 지우고 모듈화 한 파일을 받았다.
    • 근데 내 방식으로 하니까 갑자기 인증 에러가 뜸
    • 아니 왜 인증에러가 뜨지..
    • 해서 팀원분이 수동으로 img path를 바꾸셨다.
    • 그런데 또 작동 안됨
    • 알고보니 라우터에 전부 다 validation을 하게끔 되어있었다.
    • 라우터 설정하는 폴더가 총 두군데 있는데 한군데만 확인해서 발생했다. 아니 세군데구나..
    • 이런일이 있어서 라우터/컨트롤러 최대한 이렇게 기능별로 나누었으면 좋겠다는 생각이 들었다.

    imgUpload middleware.js

    const path = require("path")
    const multer = require("multer")
    const upload = multer({
        storage: multer.diskStorage({
            destination(req, file, done) {
                done(null, "uploads/")
            },
            filename(req, file, done) {
                const ext = path.extname(file.originalname)
                done(null, path.basename(file.originalname, ext) + Date.now() + ext)
            },
        }),
    })
    
    module.exports = upload
    

    controller.js

    exports.postUpload = async (req, res) => {
        //login user정보
        const userId = res.locals.user;
        const {
            params: { category },
            body: { title, content }
        } = req;
        const img = req.file.path
        //이미지파일 경로 수정하는 코드
        // 서버에서는 '/', 윈도우에서는 '\\'
        const temp = img.split('/')[1]
        const fullimgpath = 'http://15.164.164.65/' + temp
        //TODO: save image, path
        try {
            ...
      
            const newPost = await Post.create({
                title,
                content,
                user,
                category,
                img: fullimgpath,
            });
            res.send({ newPost });
        } catch (error) {
        //multer 에러핸들링
            if (error instanceof multer.MulterError) {
                res.status(400).send({
                    errormessage: "파일 업로드 중 오류가 발생했습니다.",
                });
                //이외의 에러 핸들
            } else {
                res.status(400).send({
                    errormessage: "게시글 업로드 중 오류가 발생했습니다.",
                });
            }
            console.log(error);
        }
    };
    
Designed by Tistory.