diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 887c7a3ca566a4dfe428685786e331cd7347b107..938be3a83a5a18971b629dbb40b19b8a85883595 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,15 +2,7 @@ import React from "react"; import { BrowserRouter, Route, Routes } from "react-router-dom"; import "tailwindcss/tailwind.css"; import { IntoPost } from "./post/intopost"; -import { - Login, - Profile, - RequireAuth, - Signup, - Admin, - ImgRewrite, - Search, -} from "./auth"; +import { Login, Profile, RequireAuth, Signup, Admin, ImgRewrite } from "./auth"; import { Header, Body } from "./home"; import { Board } from "./board"; import Posting from "./post/posting"; @@ -37,7 +29,6 @@ export const App = () => { } /> } /> } /> - {/* */} { /> } /> } /> - } /> diff --git a/frontend/src/auth/RequireAuth.tsx b/frontend/src/auth/RequireAuth.tsx index 3556a624f9942e70ce74d0f447ce2f9ec2fceb58..10268d2cb7b2ddf5874b7af26601202228130c00 100644 --- a/frontend/src/auth/RequireAuth.tsx +++ b/frontend/src/auth/RequireAuth.tsx @@ -7,9 +7,7 @@ export const RequireAuth: FC<{ children: JSX.Element }> = ({ children }) => { const location = useLocation(); if (!user.isLoggedIn) { - return ( - - ); + return ; } return children; }; diff --git a/frontend/src/auth/admin.tsx b/frontend/src/auth/admin.tsx index b13815369d5b66f31500c8ebb0b92e8e8883ca3a..85c9497c6a812b6c17f50f3c7c63e0c70947244c 100644 --- a/frontend/src/auth/admin.tsx +++ b/frontend/src/auth/admin.tsx @@ -1,7 +1,7 @@ import React, { FormEvent, useEffect, useState, MouseEvent } from "react"; import { Link } from "react-router-dom"; import { mainimgApi } from "../apis"; -import { picture } from "../apis/profile.api"; +import { profileUpload } from "../apis/profile.api"; import { catchErrors } from "../helpers"; import { MainimgType } from "../types"; import { MySlide } from "./adminslide"; diff --git a/frontend/src/auth/index.tsx b/frontend/src/auth/index.tsx index a69d6e8d29a1166eb548098bf34f51af0955a0a3..78cfc5553fb2629c30ee0395ffcc9db6f1bea9ae 100644 --- a/frontend/src/auth/index.tsx +++ b/frontend/src/auth/index.tsx @@ -4,4 +4,3 @@ export { default as Profile } from "./profile"; export { RequireAuth } from "./RequireAuth"; export { default as Admin } from "./admin"; export { default as ImgRewrite } from "./imgrewrite"; -export { default as Search } from "./search"; diff --git a/frontend/src/auth/search.tsx b/frontend/src/auth/search.tsx deleted file mode 100644 index 2a53bae33931cf4c9e0f28a121a01b0163d7c9b1..0000000000000000000000000000000000000000 --- a/frontend/src/auth/search.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from "react"; -import { useLocation } from "react-router-dom"; - -export default function Search() { - const a = useLocation().state; - - return ( -
-
-
- ); -} diff --git a/frontend/src/types/index.tsx b/frontend/src/types/index.tsx index c95f450aac5c3cc19909341171e009762aa85693..5628a4f8607902bf2dc4632165d94e9f24176767 100644 --- a/frontend/src/types/index.tsx +++ b/frontend/src/types/index.tsx @@ -31,7 +31,7 @@ export interface SignupUser { export interface Profile { _id: string; email: string; - avatar: { + fileInfo: { originalfilename: string; newfilename: string; picturepath: string; diff --git a/src/app.ts b/src/app.ts index 365b1171ea87773befaf5527f511fe0a8cbf4ac9..b1c55bfb03c74b4ae75407eedd5e7b54320249bb 100644 --- a/src/app.ts +++ b/src/app.ts @@ -12,7 +12,6 @@ app.use(cookieParser()); app.use("/api", router); app.use("/images", express.static(path.join(__dirname, "..", "/uploads"))); -app.use("/images", express.static(path.join(__dirname, "..", "/adminpics"))); app.use((err: any, req: Request, res: Response, next: NextFunction) => { console.log("익스프레스 에러: ", err); diff --git a/src/controllers/fileinfo.controller.ts b/src/controllers/fileinfo.controller.ts new file mode 100644 index 0000000000000000000000000000000000000000..a3d1c435950c8bc3dc95028830431aaab84f38f6 --- /dev/null +++ b/src/controllers/fileinfo.controller.ts @@ -0,0 +1,45 @@ +import formidable from "formidable"; +import { asyncWrap } from "../helpers/asyncWrap"; +import { TypedRequest } from "../types"; + +export const uploadFile = asyncWrap(async (reqExp, res, next) => { + const req = reqExp as TypedRequest; + const form = formidable({ multiples: false, uploadDir: "uploads" }); + + await new Promise((resolve, reject) => { + form.parse(req, (err, fields, files) => { + if (err) { + reject(err); + return; + } + console.log("fields", fields); + console.log("files", files); + req.body = fields; + req.files = files; + resolve(files); + }); + }); + next(); + return; +}); + +export const uploadFiles = asyncWrap(async (reqExp, res, next) => { + const req = reqExp as TypedRequest; + const form = formidable({ multiples: true, uploadDir: "uploads" }); + + await new Promise((resolve, reject) => { + form.parse(req, (err, fields, files) => { + if (err) { + reject(err); + return; + } + console.log("fields", fields); + console.log("files", files); + req.body = fields; + req.files = files; + resolve(files); + }); + }); + next(); + return; +}); diff --git a/src/controllers/index.ts b/src/controllers/index.ts index cf8e06e196dfc42394b8adc2cc73b160fdb4f9f0..547b880c46e2f23c95ba228714d931eeb47fc367 100644 --- a/src/controllers/index.ts +++ b/src/controllers/index.ts @@ -2,4 +2,5 @@ export * as authCtrl from "./auth.controller"; export * as postCtrl from "./post.controller"; export * as roleCtrl from "./role.controller"; export * as userCtrl from "./user.controller"; -export * as mainimgCtrl from "./mainimg.controller"; \ No newline at end of file +export * as mainimgCtrl from "./mainimg.controller"; +export * as fileInfoCtrl from "./fileinfo.controller"; diff --git a/src/controllers/mainimg.controller.ts b/src/controllers/mainimg.controller.ts index 83836e0041f93c6b8302f73409d8df3d380e2a4e..4fbfbd712639d0f7c06c4953c16ecf229134c017 100644 --- a/src/controllers/mainimg.controller.ts +++ b/src/controllers/mainimg.controller.ts @@ -12,7 +12,7 @@ export const createMainimg = asyncWrap(async (reqExp, res) => { const { userId } = req.auth; const form = formidable({ - uploadDir: "adminpics", + uploadDir: "uploads", keepExtensions: true, multiples: false, }); diff --git a/src/db/mainimg.db.ts b/src/db/mainimg.db.ts index 6da5569fe765376231edcf9ed78308aad5a4a3e3..ac4011e34526ceeca2d6d7b5642da7f8a9f34d78 100644 --- a/src/db/mainimg.db.ts +++ b/src/db/mainimg.db.ts @@ -1,8 +1,8 @@ import { ObjectId } from "mongoose"; -import { Avatar, IAvatar, Mainimg, MainimgType } from "../models"; +import { FileInfo, IFileInfo, Mainimg, MainimgType } from "../models"; -export const createMainimg = async (mainimg: MainimgType, pic: IAvatar) => { - const newPic = await Avatar.create({ +export const createMainimg = async (mainimg: MainimgType, pic: IFileInfo) => { + const newPic = await FileInfo.create({ originalfilename: pic.originalfilename, newfilename: pic.newfilename, pictureauth: pic.picturepath, diff --git a/src/models/fileinfo.model.ts b/src/models/fileinfo.model.ts index b6a071f79e66a80d9437bfd786534c97b1a16c5f..24fbf3fa910f50f73cf1518e21577e03a67e544a 100644 --- a/src/models/fileinfo.model.ts +++ b/src/models/fileinfo.model.ts @@ -1,17 +1,17 @@ import { model, Schema } from "mongoose"; -export interface IAvatar { +export interface IFileInfo { originalfilename?: string; newfilename?: string; picturepath?: string; nickname?: string; } -const Avatarschema = new Schema({ +const schema = new Schema({ originalfilename: { type: String, unique: true }, newfilename: { type: String }, nickname: { type: String }, picturepath: { type: String }, }); -export default model("Avatar", Avatarschema); +export default model("FileInfo", schema); diff --git a/src/models/index.ts b/src/models/index.ts index 821cab3d112ffedce2bee23e557ae809982d0be8..91545620114b24ac71c1bf84b6d2152808136aa7 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,5 +1,5 @@ export { default as User, IUser } from "./user.model"; export { default as Post, PostType } from "./post.model"; export { default as Role } from "./role.model"; -export { default as Avatar, IAvatar } from "./fileinfo.model"; +export { default as FileInfo, IFileInfo } from "./fileinfo.model"; export { default as Mainimg, MainimgType } from "./mainimg.model"; diff --git a/src/models/mainimg.model.ts b/src/models/mainimg.model.ts index da24530922fab52e6e5205ce6b20463a5790013b..3b6c94396d616b495a127bd44f29c7316097a1ee 100644 --- a/src/models/mainimg.model.ts +++ b/src/models/mainimg.model.ts @@ -4,7 +4,7 @@ export interface MainimgType { theme: string; city: string; title: string; - pic?: Types.ObjectId; + fileInfo?: Types.ObjectId; } const MainimgSchema = new Schema({ @@ -18,7 +18,7 @@ const MainimgSchema = new Schema({ type: String, required: true, }, - pic: { type: Schema.Types.ObjectId, ref: "Avatar" }, + fileInfo: { type: Schema.Types.ObjectId, ref: "Fileinfo" }, }); export default model("Mainimg", MainimgSchema); diff --git a/src/models/user.model.ts b/src/models/user.model.ts index 95181dad37f07891ad05dbb6611bc70713693e06..ac1676b9b7a55acf07770030dcb7668b4aa64fea 100644 --- a/src/models/user.model.ts +++ b/src/models/user.model.ts @@ -5,7 +5,7 @@ export interface IUser { name?: string; password: string; role?: Types.ObjectId; - avatar?: Types.ObjectId; + fileInfo?: Types.ObjectId; } const validateEmail = (email: string) => { @@ -22,7 +22,7 @@ const schema = new Schema( validate: [validateEmail, "이메일을 입력해주세요"], }, name: { type: String }, - avatar: { type: Schema.Types.ObjectId, ref: "Avatar" }, + fileInfo: { type: Schema.Types.ObjectId, ref: "FileInfo" }, password: { type: String, required: true, select: false }, role: { type: Schema.Types.ObjectId, ref: "Role" }, }, diff --git a/src/routes/user.route.ts b/src/routes/user.route.ts index af3669b758664865585323416a9bf67dde1215bc..5e5cd62e7f5392c3843a8ba16a485eccac729745 100644 --- a/src/routes/user.route.ts +++ b/src/routes/user.route.ts @@ -1,11 +1,16 @@ import express from "express"; -import { userCtrl, authCtrl } from "../controllers"; +import { userCtrl, authCtrl, fileInfoCtrl } from "../controllers"; const router = express.Router(); router .route("/") .get(authCtrl.requireLogin, userCtrl.getUsers) - .post(authCtrl.requireLogin, authCtrl.hasRole("admin"), userCtrl.createUser); + .post( + authCtrl.requireLogin, + authCtrl.hasRole("admin"), + fileInfoCtrl.uploadFile, + userCtrl.createUser + ); export default router;