TodayILearned/Wetube

[Wetube] multer middleware

tuigun 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;