Route.post() requires a callback function but got a [object Undefined]

나의 기술 블로그·2024년 7월 16일

에러처리

목록 보기
6/11

문제 발생

Route.post() requires a callback function but got a [object Undefined]

node.js 에서 종종 마주치는 에러

post 메소드를 선언하는 부분에서 미들웨어 연결을 해주었는데 위의 에러를 마주쳤다.

인자 포맷이 맞지 않아 나는 에러인 것 같다.

원인

routes/index.js 에서


const mdware = require("../middleware/upload_recipeimg");
router.post("/write", mdware.uploadFile, controller.postRecipeWrite);

미들웨어파일에 들어가보니,

const multer = require('multer');
const path = require("path");
// const express = require('express');
// const app = express();
// app.use('/uploads', express.static(__dirname + '/uploads/recipe'));
console.log("middleware multer connected.");

// 이미지 저장하기 

var date=new Date(Date.now());
var date= date.getFullYear() + date.getMonth() + 
+ date.getDay() + date.getHours() + date.getMinutes()
+ date.getSeconds() +date.getMilliseconds()

// multer 미들 웨어 등록 
const uploadImage = multer({
    storage: multer.diskStorage({ 
        destination(req, file, done) {
            done(null, 'uploads/recipe') // 파일을 저장할 경로 
        },
        filename(req, file, done) {
            const ext = path.extname(file.originalname);
            console.log("ext >>>>", req.params);
            done(null, path.basename(file.originalname+'_img0',ext ) + date + ext); // 저장할 파일명
    
        },
    }),
    limits: { fileSize: 100 * 1024 * 1024 }, //업로드 크기 제한
});

#exports.uploadFile=uploadImage.fields([{name:'main_image'},{name:'sub_image1'}]);

테스트하다가 모듈 exports 하는 부분을 주석처리 했기 때문에, 라우터에서 찾지 못한 것이었다.

해결 방안

주석처리한 부분을 풀면 된다.
Node.js로 프로젝트를 하다보니 위의 에러를 많이 마주쳤는데, 다양한 원인이 있는 것 같다.

해당 에러나는 라인에서 모듈이 잘 선언되거나 export 되었는지 확인해보자 !

profile
문제해결을 두려워하지 말자!

0개의 댓글