
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 되었는지 확인해보자 !