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;