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;