ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Wetube] multer middleware
    TodayILearned/Wetube 2020. 10. 11. 03:29

     

     

    multer

    node.js에서 파일업로드를 가능하게하는 모듈이다.

     

    middlewares.js

    사용방법 : dest로 DB가 저장될 곳을 지정 후, 해당 파일이 업로드되는 router로 export해준다.

    import multer from "multer";
    import routes from "./routes";
    
    const multerVideo = multer({ dest: "uploads/videos/" });
    export const localsMiddleware = (req, res, next) => {
    	res.locals.siteName = "Wetube";
    	res.locals.routes = routes;
    	res.locals.user = {
    		isAuthenticated: true,
    		id: 1,
    	};
    	next();
    };
    
    export const uploadVideo = multerVideo.single("videoFile");
    

    videoController.js

    const export upload = async(req,res) => {
    const { 
    	body: { title, description }, //Title,description은 multer를 이용해 url로 받아올 수 있는 정보이다.)
    	file: { path } //path또한 마찬가지..
    } = req;
    const newVideo = await Video.create({
    	fileUrl: path,  //file url, title, description은 video스키마에서 지정한 key값이다.
    	title,        
    	description
    });
    res.redirect(routes.videoDetail(newVideo.id));  //newvidoe의 id를 받아 url에 돌려준다.

    컨트롤러에서 upload 시, multer를 통해 받아올 정보(title,description,path)를 지정 후, 

    해당 요소들을 newVideo에서 불러온다.

    이렇게하면, url에 http://localhost:4000/videos/5f6a0602db57a80205815951

    이런식으로 multer에서 받아온 file에 대한 내용이 url에 붙게된다.

    위 코드의 내용 중, title, description, path 는 MODEL파일인 video.js에서 이미 스키마로 작성한 값이다.

    더보기
    import mongoose from "mongoose";
    
    const videoSchema = new mongoose.Schema({
    	fileUrl: {
    		type: String,
    		required: "File URL is required",
    	},
    	title: {
    		type: String,
    		required: "Title is required",
    	},
    	description: String,
    	view: {
    		type: Number,
    		default: 0,
    	},
    	createdAt: {
    		type: Date,
    		default: Date.now,
    	},
    	comments: [
    		{
    			type: mongoose.Schema.Types.ObjectId,
    			ref: "comment",
    		},
    	],
    });
    
    const model = mongoose.model("Video", videoSchema);
    export default model;
    

    'TodayILearned > Wetube' 카테고리의 다른 글

    노마드 WETUBE챌린지 후기  (0) 2020.10.25
    [Wetube] 정규표현식 Search 로직 구성  (0) 2020.09.28
    [Wetube] challenge 근황  (0) 2020.09.23
    [Wetube] Delete video 구현  (2) 2020.09.16
    자바스크립트의 비동기식 처리  (0) 2020.09.09
Designed by Tistory.