Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
W
WYH
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
sangminLee
WYH
Commits
ac5636ad
Commit
ac5636ad
authored
4 years ago
by
epson220
Browse files
Options
Downloads
Patches
Plain Diff
searchBoardByKeyword
parent
c4b82889
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
backend/routes/users.js
+16
-0
16 additions, 0 deletions
backend/routes/users.js
frontend/.eslintcache
+1
-1
1 addition, 1 deletion
frontend/.eslintcache
frontend/src/components/Board.js
+30
-5
30 additions, 5 deletions
frontend/src/components/Board.js
with
47 additions
and
6 deletions
backend/routes/users.js
+
16
−
0
View file @
ac5636ad
...
@@ -487,4 +487,20 @@ router.post("/profile", async function (req, res) {
...
@@ -487,4 +487,20 @@ router.post("/profile", async function (req, res) {
}
}
});
});
router
.
post
(
"
/searchBoard
"
,
async
function
(
req
,
res
)
{
console
.
log
(
"
/searchBoard post 요청
"
);
console
.
dir
(
req
.
body
);
try
{
let
searched
=
await
BoardModel
.
find
({
title
:
{
$regex
:
req
.
body
.
input
},
});
console
.
log
(
searched
);
res
.
send
(
searched
);
}
catch
(
err
)
{
console
.
log
(
err
);
}
});
module
.
exports
=
router
;
module
.
exports
=
router
;
This diff is collapsed.
Click to expand it.
frontend/.eslintcache
+
1
−
1
View file @
ac5636ad
[{
"C:
\\
WYH
\\
frontend
\\
src
\\
reportWebVitals.js"
:
"1"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
App.js"
:
"2"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
index.js"
:
"3"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Profile.js"
:
"4"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Board.js"
:
"5"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Home.js"
:
"6"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Signup.js"
:
"7"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Login.js"
:
"8"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteBoard.js"
:
"9"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
DetailBoard.js"
:
"10"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteProfile.js"
:
"11"
},{
"size"
:
362
,
"mtime"
:
1606157613272
,
"results"
:
"12"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1764
,
"mtime"
:
1607415610889
,
"results"
:
"14"
,
"hashOfConfig"
:
"13"
},{
"size"
:
544
,
"mtime"
:
1606240034288
,
"results"
:
"15"
,
"hashOfConfig"
:
"13"
},{
"size"
:
2234
,
"mtime"
:
1607425040281
,
"results"
:
"16"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1711
,
"mtime"
:
1607358800912
,
"results"
:
"17"
,
"hashOfConfig"
:
"13"
},{
"size"
:
370
,
"mtime"
:
1606662762631
,
"results"
:
"18"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1575
,
"mtime"
:
1607345129868
,
"results"
:
"19"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1232
,
"mtime"
:
1606662786263
,
"results"
:
"20"
,
"hashOfConfig"
:
"13"
},{
"size"
:
3419
,
"mtime"
:
1607104090152
,
"results"
:
"21"
,
"hashOfConfig"
:
"13"
},{
"size"
:
2593
,
"mtime"
:
1607425197042
,
"results"
:
"22"
,
"hashOfConfig"
:
"13"
},{
"size"
:
3396
,
"mtime"
:
1607369801073
,
"results"
:
"23"
,
"hashOfConfig"
:
"13"
},{
"filePath"
:
"24"
,
"messages"
:
"25"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
},
"10w9ldj"
,{
"filePath"
:
"26"
,
"messages"
:
"27"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"28"
,
"messages"
:
"29"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"30"
},{
"filePath"
:
"31"
,
"messages"
:
"32"
,
"errorCount"
:
0
,
"warningCount"
:
3
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"33"
,
"messages"
:
"34"
,
"errorCount"
:
0
,
"warningCount"
:
2
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"35"
},{
"filePath"
:
"36"
,
"messages"
:
"37"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"38"
,
"messages"
:
"39"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"40"
,
"messages"
:
"41"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"42"
},{
"filePath"
:
"43"
,
"messages"
:
"44"
,
"errorCount"
:
0
,
"warningCount"
:
4
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"45"
,
"usedDeprecatedRules"
:
"30"
},{
"filePath"
:
"46"
,
"messages"
:
"47"
,
"errorCount"
:
0
,
"warningCount"
:
3
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"48"
,
"messages"
:
"49"
,
"errorCount"
:
0
,
"warningCount"
:
6
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"50"
},
"C:
\\
WYH
\\
frontend
\\
src
\\
reportWebVitals.js"
,[],
"C:
\\
WYH
\\
frontend
\\
src
\\
App.js"
,[
"51"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
index.js"
,[],[
"52"
,
"53"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Profile.js"
,[
"54"
,
"55"
,
"56"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Board.js"
,[
"57"
,
"58"
],
"import React, { useEffect, useState } from
\"
react
\"
;
\r\n
import { Route, Link } from
\"
react-router-dom
\"
;
\r\n
import axios from
\"
axios
\"
;
\r\n\r\n
const Board = () => {\r
\n
const [response, setResponse] = useState([]);
\r\n\r\n
useEffect(async () => {\r
\n
// try {\r
\n
// console.log(
\"
axios 실행
\"
);
\r\n
// let res = [];
\r\n
// res = await axios.get(
\"
http://localhost:3001/board
\"
);
\r\n
// console.log(res);
\r\n
// setResponse(res.data);
\r\n
// console.log(response);
\r\n
// } catch (err) {\r
\n
// console.log(
\"
axios err
\"
);
\r\n
// console.log(err);
\r\n
// }
\r\n
async function fetchData() {\r
\n
console.log(
\"
react board get axios 호출
\"
);
\r\n
const result = await axios.get(
\"
http://localhost:3001/board
\"
);
\r\n
console.log(result.data);
\r\n
setResponse(result.data);
\r\n
}
\r\n
fetchData();
\r\n
}, []);
\r\n\r\n
return (
\r\n
<div>
\r\n
<button>
\r\n
<Link to=
\"
/writeBoard
\"
>게시글 작성</Link>
\r\n
</button>
\r\n
<button>
\r\n
<Link to=
\"
/updateProf
\"
>프로필 작성</Link>
\r\n
</button>
\r\n
<form action=
\"
http://localhost:3001/searchBoard
\"
method=
\"
post
\"
>
\r\n
<input type=
\"
text
\"
name=
\"
searchKeyword
\"
></input>
\r\n
<button type=
\"
submit
\"
>게시글검색</button>
\r\n
</form>
\r\n
<ol>
\r\n
{response.map((res) => (
\r\n
<li key=
{
res._id
}
>
\r\n
{/* <Link to=
{
`/detailBoard/${res._id}`
}
>
\r\n
<div onClick=
{
handleOnClick(res._id)
}
>
\r\n
{
res.title
}
{
res.created_at
}
\r\n
</div>
\r\n
</Link> */}
\r\n
<Link to=
{
`/detailBoard/${res._id}`
}
>
\r\n
{
res.title
}
{
res.created_at
}
\r\n
</Link>
\r\n
</li>
\r\n
))}
\r\n
</ol>
\r\n
</div>
\r\n
);
\r\n
};
\r\n\r\n
export default Board;
\r\n
"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Home.js"
,[
"59"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Signup.js"
,[
"60"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Login.js"
,[
"61"
],
"import React, { useState } from
\"
react
\"
;
\r\n
import { post } from
\"
axios
\"
;
\r\n\r\n
const Login = () => {\r
\n
const [username, setUsername] = useState(
\"\"
);
\r\n
const [password, setPassword] = useState(
\"\"
);
\r\n\r\n
const onChangeUsername = (e) => setUsername(e.target.value);
\r\n
const onChangePassword = (e) => setPassword(e.target.value);
\r\n\r\n
// const handleFormSubmit = () => {\r
\n
// const url =
\"
/login
\"
;
\r\n
// let formData = new FormData();
\r\n
// formData.append(
\"
username
\"
, username);
\r\n
// formData.append(
\"
password
\"
, password);
\r\n\r\n
// let config = {\r
\n
// headers: {\r
\n
//
\"
content-type
\"
:
\"
multipart/form-data
\"
,
\r\n
// },
\r\n
// };
\r\n\r\n
// return post(url, formData, config);
\r\n
// };
\r\n\r\n
return (
\r\n
<form action=
\"
http://localhost:3001/login
\"
method=
\"
post
\"
>
\r\n
<h1>로그인 화면</h1>
\r\n
이메일:
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
email
\"\r\n
value=
{
username
}
\r\n
onChange=
{
onChangeUsername
}
\r\n
></input>
\r\n
비밀번호:
\r\n
<input
\r\n
type=
\"
password
\"\r\n
name=
\"
password
\"\r\n
value=
{
password
}
\r\n
onChange=
{
onChangePassword
}
\r\n
></input>
\r\n
<button type=
\"
submit
\"
>로그인</button>
\r\n
</form>
\r\n
);
\r\n
};
\r\n\r\n
export default Login;
\r\n
"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteBoard.js"
,[
"62"
,
"63"
,
"64"
,
"65"
],
"import React, { useState } from
\"
react
\"
;
\r\n\r\n
const WriteBoard = () => {\r
\n
const [title, setTitle] = useState(
\"\"
);
\r\n
const [content, setContent] = useState(
\"\"
);
\r\n
const [hobby, setHobby] = useState(
\"\"
);
\r\n\r\n
const onChangeTitle = (e) => setTitle(e.target.value);
\r\n
const onChangeContent = (e) => setContent(e.target.value);
\r\n
const onChangeHobby = (e) => setHobby(e.target.value);
\r\n\r\n
return (
\r\n
<div>
\r\n
<form
\r\n
action=
\"
http://localhost:3001/writeBoard
\"\r\n
method=
\"
post
\"\r\n
encType=
\"
multipart/form-data
\"\r\n
>
\r\n
<label>제목</label>
\r\n
<input type=
\"
text
\"
name=
\"
title
\"
onChange=
{
onChangeTitle
}
></input>
\r\n
<br></br>
\r\n
<label>본문</label>
\r\n
<textarea
\r\n
type=
\"
text
\"\r\n
name=
\"
content
\"\r\n
onChange=
{
onChangeContent
}
\r\n
></textarea>
\r\n
<br></br>
\r\n
<label>취미</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
ex/sp
\"
name=
\"
hobby
\"
/>
\r\n
운동/스포츠
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
out/tr
\"
name=
\"
hobby
\"
/>
\r\n
아웃도어/여행
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
bk/wr
\"
name=
\"
hobby
\"
/>
\r\n
인문학/책/글
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
fg/lg
\"
name=
\"
hobby
\"
/>
\r\n
외국/언어
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
cul/pfm
\"
name=
\"
hobby
\"
/>
\r\n
문화/공연
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
mu/inst
\"
name=
\"
hobby
\"
/>
\r\n
음악/악기
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
cft
\"
name=
\"
hobby
\"
/>
\r\n
공예/만들기
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
dan
\"
name=
\"
hobby
\"
/>
\r\n
댄스/무용
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
volu
\"
name=
\"
hobby
\"
/>
\r\n
봉사활동
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
par
\"
name=
\"
hobby
\"
/>
\r\n
사교/인맥
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
game
\"
name=
\"
hobby
\"
/>
\r\n
게임/오락
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
pic
\"
name=
\"
hobby
\"
/>
\r\n
사진/편집/촬영/영상
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
inv
\"
name=
\"
hobby
\"
/>
\r\n
제테크/투자
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
cok/fod
\"
name=
\"
hobby
\"
/>
\r\n
요리/음식/맛집
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
fas/bea
\"
name=
\"
hobby
\"
/>
\r\n
패션/뷰티/코디
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
art/draw
\"
name=
\"
hobby
\"
/>
\r\n
미술/그림
\r\n
</label>
\r\n
<br></br>
\r\n
<br></br>
\r\n
<label>사진첨부</label>
\r\n
<input type=
\"
file
\"
name=
\"
photo
\"
></input>
\r\n
<br></br>
\r\n
<button type=
\"
submit
\"
>ok</button>
\r\n
</form>
\r\n
</div>
\r\n
);
\r\n
};
\r\n\r\n
export default WriteBoard;
\r\n
"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
DetailBoard.js"
,[
"66"
,
"67"
,
"68"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteProfile.js"
,[
"69"
,
"70"
,
"71"
,
"72"
,
"73"
,
"74"
],
"import React, { useEffect, useState } from
\"
react
\"
;
\r\n
import axios from
\"
axios
\"
;
\r\n\r\n
const WriteProfile = () => {\r
\n
const [Profile, setProfile] = useState({\r
\n
profile_photo:
\"\"
,
\r\n
created_at:
\"\"
,
\r\n
self_intro:
\"\"
,
\r\n
user_id:
\"\"
,
\r\n
user_email:
\"\"
,
\r\n
location:
\"\"
,
\r\n
age:
\"\"
,
\r\n
});
\r\n
const [Img, setImg] = useState(
\"\"
);
\r\n
const [imgBase64, setImgBase64] = useState(
\"\"
);
\r\n
const [imgFile, setImgFile] = useState(null);
\r\n\r\n
const handleChangeFile = (event) => {\r
\n
let reader = new FileReader();
\r\n
reader.onloadend = () => {\r
\n
// 2. 읽기가 완료되면 아래코드가 실행됩니다.
\r\n
const base64 = reader.result;
\r\n
if (base64) {\r
\n
setImgBase64(base64.toString()); // 파일 base64 상태 업데이트
\r\n
}
\r\n
};
\r\n
if (event.target.files[0]) {\r
\n
reader.readAsDataURL(event.target.files[0]); // 1. 파일을 읽어 버퍼에 저장합니다.
\r\n
setImgFile(event.target.files[0]); // 파일 상태 업데이트
\r\n
}
\r\n
};
\r\n\r\n
const onChangeProfilePhoto = (e) =>
\r\n
setProfile({ profile_photo: e.target.value });
\r\n
const onChangeSelfIntro = (e) => setProfile({ self_intro: e.target.value });
\r\n
const onChangeLocation = (e) => setProfile({ location: e.target.value });
\r\n
const onChangeAge = (e) => setProfile({ age: e.target.value });
\r\n\r\n
useEffect(async () => {\r
\n
async function fetchData() {\r
\n
console.log(
\"
writeProfile axios get 호출
\"
);
\r\n
let res = await axios.get(
\"
http://localhost:3001/getProfileInfo
\"
);
\r\n
console.log(res);
\r\n
console.dir(res.data[0]);
\r\n
if (res.data[0] != undefined) {\r
\n
setProfile(res.data[0]);
\r\n
setImg(
\"
http://localhost:3001/uploads/
\"
+ res.data[0].profile_photo);
\r\n
}
\r\n
}
\r\n
fetchData();
\r\n
}, []);
\r\n\r\n
return (
\r\n
<div>
\r\n
<label>기존 프로필 사진</label>
\r\n
<br></br>
\r\n
<img src=
{
Img
}
width=
\"
200px
\"
height=
\"
200px
\"
></img>
\r\n
<br></br>
\r\n
<label>선택한 프로필 사진</label>
\r\n
<br></br>
\r\n
{/* <div
\r\n
style={{ backgroundColor:
\"
#efefef
\"
, width:
\"
200px
\"
, height:
\"
200px
\"
}}
\r\n
> */}
\r\n
<img src=
{
imgBase64
}
width=
\"
200px
\"
height=
\"
200px
\"
/>
\r\n
{/* </div> */}
\r\n
<form
\r\n
method=
\"
post
\"\r\n
action=
\"
http://localhost:3001/writeProfile
\"\r\n
encType=
\"
multipart/form-data
\"\r\n
>
\r\n
<label>프로필 사진</label>
\r\n
<input
\r\n
type=
\"
file
\"\r\n
name=
\"
photo
\"\r\n
//value=
\"
http://localhost:3001/uploads/
\"
+`
{
Profile.profile_photo
}
`
\r\n
// onChange=
{
onChangeProfilePhoto
}
\r\n
onChange=
{
handleChangeFile
}
\r\n
></input>
\r\n
<br></br>
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
self_intro
\"\r\n
placeholder=
\"
간단한 자기소개 및 관심사
\"\r\n
value=
{
Profile.self_intro
}
\r\n
onChange=
{
onChangeSelfIntro
}
\r\n
></input>
\r\n
<br></br>
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
age
\"\r\n
placeholder=
\"
나이
\"\r\n
value=
{
Profile.age
}
\r\n
onChange=
{
onChangeAge
}
\r\n
></input>
\r\n
<br></br>
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
loc
\"\r\n
placeholder=
\"
사는 곳
\"\r\n
value=
{
Profile.location
}
\r\n
onChange=
{
onChangeLocation
}
\r\n
></input>
\r\n
<br></br>
\r\n
<button type=
\"
submit
\"
>작성 완료</button>
\r\n
</form>
\r\n
</div>
\r\n
);
\r\n
};
\r\n\r\n
export default WriteProfile;
\r\n
"
,{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"76"
,
"line"
:
1
,
"column"
:
17
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
1
,
"endColumn"
:
26
},{
"ruleId"
:
"79"
,
"replacedBy"
:
"80"
},{
"ruleId"
:
"81"
,
"replacedBy"
:
"82"
},{
"ruleId"
:
"83"
,
"severity"
:
1
,
"message"
:
"84"
,
"line"
:
29
,
"column"
:
13
,
"nodeType"
:
"85"
,
"endLine"
:
41
,
"endColumn"
:
4
},{
"ruleId"
:
"83"
,
"severity"
:
1
,
"message"
:
"86"
,
"line"
:
41
,
"column"
:
6
,
"nodeType"
:
"87"
,
"endLine"
:
41
,
"endColumn"
:
8
,
"suggestions"
:
"88"
},{
"ruleId"
:
"89"
,
"severity"
:
1
,
"message"
:
"90"
,
"line"
:
51
,
"column"
:
15
,
"nodeType"
:
"91"
,
"endLine"
:
51
,
"endColumn"
:
59
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"92"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
2
,
"endColumn"
:
15
},{
"ruleId"
:
"83"
,
"severity"
:
1
,
"message"
:
"84"
,
"line"
:
8
,
"column"
:
13
,
"nodeType"
:
"85"
,
"endLine"
:
27
,
"endColumn"
:
4
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"92"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
2
,
"endColumn"
:
15
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"93"
,
"line"
:
3
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
3
,
"endColumn"
:
14
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"93"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
2
,
"endColumn"
:
14
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"94"
,
"line"
:
4
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
4
,
"endColumn"
:
15
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"95"
,
"line"
:
5
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
5
,
"endColumn"
:
17
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"96"
,
"line"
:
6
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
6
,
"endColumn"
:
15
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"97"
,
"line"
:
10
,
"column"
:
9
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
10
,
"endColumn"
:
22
},{
"ruleId"
:
"83"
,
"severity"
:
1
,
"message"
:
"84"
,
"line"
:
31
,
"column"
:
13
,
"nodeType"
:
"85"
,
"endLine"
:
47
,
"endColumn"
:
4
},{
"ruleId"
:
"83"
,
"severity"
:
1
,
"message"
:
"98"
,
"line"
:
47
,
"column"
:
6
,
"nodeType"
:
"87"
,
"endLine"
:
47
,
"endColumn"
:
8
,
"suggestions"
:
"99"
},{
"ruleId"
:
"89"
,
"severity"
:
1
,
"message"
:
"90"
,
"line"
:
59
,
"column"
:
9
,
"nodeType"
:
"91"
,
"endLine"
:
59
,
"endColumn"
:
71
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"100"
,
"line"
:
16
,
"column"
:
10
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
16
,
"endColumn"
:
17
},{
"ruleId"
:
"75"
,
"severity"
:
1
,
"message"
:
"101"
,
"line"
:
33
,
"column"
:
9
,
"nodeType"
:
"77"
,
"messageId"
:
"78"
,
"endLine"
:
33
,
"endColumn"
:
29
},{
"ruleId"
:
"83"
,
"severity"
:
1
,
"message"
:
"84"
,
"line"
:
39
,
"column"
:
13
,
"nodeType"
:
"85"
,
"endLine"
:
51
,
"endColumn"
:
4
},{
"ruleId"
:
"102"
,
"severity"
:
1
,
"message"
:
"103"
,
"line"
:
45
,
"column"
:
23
,
"nodeType"
:
"104"
,
"messageId"
:
"105"
,
"endLine"
:
45
,
"endColumn"
:
25
},{
"ruleId"
:
"89"
,
"severity"
:
1
,
"message"
:
"90"
,
"line"
:
57
,
"column"
:
7
,
"nodeType"
:
"91"
,
"endLine"
:
57
,
"endColumn"
:
51
},{
"ruleId"
:
"89"
,
"severity"
:
1
,
"message"
:
"90"
,
"line"
:
64
,
"column"
:
7
,
"nodeType"
:
"91"
,
"endLine"
:
64
,
"endColumn"
:
59
},
"no-unused-vars"
,
"'Component' is defined but never used."
,
"Identifier"
,
"unusedVar"
,
"no-native-reassign"
,[
"106"
],
"no-negated-in-lhs"
,[
"107"
],
"react-hooks/exhaustive-deps"
,
"Effect callbacks are synchronous to prevent race conditions. Put the async function inside:
\n\n
useEffect(() => {\n async function fetchData() {\n // You can await here
\n
const response = await MyAPI.getData(someId);
\n
// ...
\n
}
\n
fetchData();
\n
}, [someId]); // Or [] if effect doesn't need props or state
\n\n
Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching"
,
"ArrowFunctionExpression"
,
"React Hook useEffect has a missing dependency: 'email'. Either include it or remove the dependency array."
,
"ArrayExpression"
,[
"108"
],
"jsx-a11y/alt-text"
,
"img elements must have an alt prop, either with meaningful text, or an empty string for decorative images."
,
"JSXOpeningElement"
,
"'Route' is defined but never used."
,
"'post' is defined but never used."
,
"'title' is assigned a value but never used."
,
"'content' is assigned a value but never used."
,
"'hobby' is assigned a value but never used."
,
"'onChangeHobby' is assigned a value but never used."
,
"React Hook useEffect has missing dependencies: 'Board' and 'board_id'. Either include them or remove the dependency array."
,[
"109"
],
"'imgFile' is assigned a value but never used."
,
"'onChangeProfilePhoto' is assigned a value but never used."
,
"eqeqeq"
,
"Expected '!==' and instead saw '!='."
,
"BinaryExpression"
,
"unexpected"
,
"no-global-assign"
,
"no-unsafe-negation"
,{
"desc"
:
"110"
,
"fix"
:
"111"
},{
"desc"
:
"112"
,
"fix"
:
"113"
},
"Update the dependencies array to be: [email]"
,{
"range"
:
"114"
,
"text"
:
"115"
},
"Update the dependencies array to be: [Board, board_id]"
,{
"range"
:
"116"
,
"text"
:
"117"
},[
1071
,
1073
],
"[email]"
,[
1309
,
1311
],
"[Board, board_id]"
]
[{
"C:
\\
WYH
\\
frontend
\\
src
\\
reportWebVitals.js"
:
"1"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
App.js"
:
"2"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
index.js"
:
"3"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Profile.js"
:
"4"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Board.js"
:
"5"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Home.js"
:
"6"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Signup.js"
:
"7"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Login.js"
:
"8"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteBoard.js"
:
"9"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
DetailBoard.js"
:
"10"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteProfile.js"
:
"11"
},{
"size"
:
362
,
"mtime"
:
1606157613272
,
"results"
:
"12"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1764
,
"mtime"
:
1607415610889
,
"results"
:
"14"
,
"hashOfConfig"
:
"13"
},{
"size"
:
544
,
"mtime"
:
1606240034288
,
"results"
:
"15"
,
"hashOfConfig"
:
"13"
},{
"size"
:
2234
,
"mtime"
:
1607425040281
,
"results"
:
"16"
,
"hashOfConfig"
:
"13"
},{
"size"
:
2251
,
"mtime"
:
1607452498919
,
"results"
:
"17"
,
"hashOfConfig"
:
"13"
},{
"size"
:
370
,
"mtime"
:
1606662762631
,
"results"
:
"18"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1575
,
"mtime"
:
1607345129868
,
"results"
:
"19"
,
"hashOfConfig"
:
"13"
},{
"size"
:
1232
,
"mtime"
:
1606662786263
,
"results"
:
"20"
,
"hashOfConfig"
:
"13"
},{
"size"
:
3419
,
"mtime"
:
1607104090152
,
"results"
:
"21"
,
"hashOfConfig"
:
"13"
},{
"size"
:
2593
,
"mtime"
:
1607425197042
,
"results"
:
"22"
,
"hashOfConfig"
:
"13"
},{
"size"
:
3396
,
"mtime"
:
1607369801073
,
"results"
:
"23"
,
"hashOfConfig"
:
"13"
},{
"filePath"
:
"24"
,
"messages"
:
"25"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
},
"10w9ldj"
,{
"filePath"
:
"26"
,
"messages"
:
"27"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"28"
,
"messages"
:
"29"
,
"errorCount"
:
0
,
"warningCount"
:
0
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"usedDeprecatedRules"
:
"30"
},{
"filePath"
:
"31"
,
"messages"
:
"32"
,
"errorCount"
:
0
,
"warningCount"
:
3
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"33"
,
"messages"
:
"34"
,
"errorCount"
:
0
,
"warningCount"
:
3
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"35"
,
"messages"
:
"36"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"37"
,
"messages"
:
"38"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"39"
},{
"filePath"
:
"40"
,
"messages"
:
"41"
,
"errorCount"
:
0
,
"warningCount"
:
1
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"42"
},{
"filePath"
:
"43"
,
"messages"
:
"44"
,
"errorCount"
:
0
,
"warningCount"
:
4
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"45"
,
"usedDeprecatedRules"
:
"30"
},{
"filePath"
:
"46"
,
"messages"
:
"47"
,
"errorCount"
:
0
,
"warningCount"
:
3
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
null
},{
"filePath"
:
"48"
,
"messages"
:
"49"
,
"errorCount"
:
0
,
"warningCount"
:
6
,
"fixableErrorCount"
:
0
,
"fixableWarningCount"
:
0
,
"source"
:
"50"
},
"C:
\\
WYH
\\
frontend
\\
src
\\
reportWebVitals.js"
,[],
"C:
\\
WYH
\\
frontend
\\
src
\\
App.js"
,[
"51"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
index.js"
,[],[
"52"
,
"53"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Profile.js"
,[
"54"
,
"55"
,
"56"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Board.js"
,[
"57"
,
"58"
,
"59"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Home.js"
,[
"60"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Signup.js"
,[
"61"
],
"import React, { useState } from
\"
react
\"
;
\r\n
//import { post } from
\"
../../backend/app
\"
;
\r\n
import { post } from
\"
axios
\"
;
\r\n\r\n
const Signup = () => {\r
\n
const [email, setEmail] = useState(
\"\"
);
\r\n
const [nicname, setNicname] = useState(
\"\"
);
\r\n
const [password, setPassword] = useState(
\"\"
);
\r\n\r\n
const onChangeEmail = (e) => setEmail(e.target.value);
\r\n
const onChangeNicname = (e) => setNicname(e.target.value);
\r\n
const onChangePassword = (e) => setPassword(e.target.value);
\r\n\r\n
// const handleFormSubmit = () => {\r
\n
// const url =
\"
/signup
\"
;
\r\n
// const formData = new FormData();
\r\n
// formData.append(
\"
username
\"
, username);
\r\n
// formData.append(
\"
password
\"
, password);
\r\n
// formData.append(
\"
nicname
\"
, nicname);
\r\n\r\n
// const config = {\r
\n
// headers: {\r
\n
//
\"
content-type
\"
:
\"
multipart/form-data
\"
,
\r\n
// },
\r\n
// };
\r\n\r\n
// return post(url, formData, config);
\r\n
// };
\r\n\r\n
return (
\r\n
<form action=
\"
http://localhost:3001/signup
\"
method=
\"
post
\"
>
\r\n
<h1>회원가입</h1>
\r\n
이메일:
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
email
\"\r\n
value=
{
email
}
\r\n
onChange=
{
onChangeEmail
}
\r\n
></input>
\r\n
비밀번호:
\r\n
<input
\r\n
type=
\"
password
\"\r\n
name=
\"
password
\"\r\n
value=
{
password
}
\r\n
onChange=
{
onChangePassword
}
\r\n
></input>
\r\n
닉네임:
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
nicname
\"\r\n
value=
{
nicname
}
\r\n
onChange=
{
onChangeNicname
}
\r\n
></input>
\r\n
<button type=
\"
submit
\"
>가입완료</button>
\r\n
</form>
\r\n
);
\r\n
};
\r\n\r\n
export default Signup;
\r\n
"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
Login.js"
,[
"62"
],
"import React, { useState } from
\"
react
\"
;
\r\n
import { post } from
\"
axios
\"
;
\r\n\r\n
const Login = () => {\r
\n
const [username, setUsername] = useState(
\"\"
);
\r\n
const [password, setPassword] = useState(
\"\"
);
\r\n\r\n
const onChangeUsername = (e) => setUsername(e.target.value);
\r\n
const onChangePassword = (e) => setPassword(e.target.value);
\r\n\r\n
// const handleFormSubmit = () => {\r
\n
// const url =
\"
/login
\"
;
\r\n
// let formData = new FormData();
\r\n
// formData.append(
\"
username
\"
, username);
\r\n
// formData.append(
\"
password
\"
, password);
\r\n\r\n
// let config = {\r
\n
// headers: {\r
\n
//
\"
content-type
\"
:
\"
multipart/form-data
\"
,
\r\n
// },
\r\n
// };
\r\n\r\n
// return post(url, formData, config);
\r\n
// };
\r\n\r\n
return (
\r\n
<form action=
\"
http://localhost:3001/login
\"
method=
\"
post
\"
>
\r\n
<h1>로그인 화면</h1>
\r\n
이메일:
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
email
\"\r\n
value=
{
username
}
\r\n
onChange=
{
onChangeUsername
}
\r\n
></input>
\r\n
비밀번호:
\r\n
<input
\r\n
type=
\"
password
\"\r\n
name=
\"
password
\"\r\n
value=
{
password
}
\r\n
onChange=
{
onChangePassword
}
\r\n
></input>
\r\n
<button type=
\"
submit
\"
>로그인</button>
\r\n
</form>
\r\n
);
\r\n
};
\r\n\r\n
export default Login;
\r\n
"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteBoard.js"
,[
"63"
,
"64"
,
"65"
,
"66"
],
"import React, { useState } from
\"
react
\"
;
\r\n\r\n
const WriteBoard = () => {\r
\n
const [title, setTitle] = useState(
\"\"
);
\r\n
const [content, setContent] = useState(
\"\"
);
\r\n
const [hobby, setHobby] = useState(
\"\"
);
\r\n\r\n
const onChangeTitle = (e) => setTitle(e.target.value);
\r\n
const onChangeContent = (e) => setContent(e.target.value);
\r\n
const onChangeHobby = (e) => setHobby(e.target.value);
\r\n\r\n
return (
\r\n
<div>
\r\n
<form
\r\n
action=
\"
http://localhost:3001/writeBoard
\"\r\n
method=
\"
post
\"\r\n
encType=
\"
multipart/form-data
\"\r\n
>
\r\n
<label>제목</label>
\r\n
<input type=
\"
text
\"
name=
\"
title
\"
onChange=
{
onChangeTitle
}
></input>
\r\n
<br></br>
\r\n
<label>본문</label>
\r\n
<textarea
\r\n
type=
\"
text
\"\r\n
name=
\"
content
\"\r\n
onChange=
{
onChangeContent
}
\r\n
></textarea>
\r\n
<br></br>
\r\n
<label>취미</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
ex/sp
\"
name=
\"
hobby
\"
/>
\r\n
운동/스포츠
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
out/tr
\"
name=
\"
hobby
\"
/>
\r\n
아웃도어/여행
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
bk/wr
\"
name=
\"
hobby
\"
/>
\r\n
인문학/책/글
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
fg/lg
\"
name=
\"
hobby
\"
/>
\r\n
외국/언어
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
cul/pfm
\"
name=
\"
hobby
\"
/>
\r\n
문화/공연
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
mu/inst
\"
name=
\"
hobby
\"
/>
\r\n
음악/악기
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
cft
\"
name=
\"
hobby
\"
/>
\r\n
공예/만들기
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
dan
\"
name=
\"
hobby
\"
/>
\r\n
댄스/무용
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
volu
\"
name=
\"
hobby
\"
/>
\r\n
봉사활동
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
par
\"
name=
\"
hobby
\"
/>
\r\n
사교/인맥
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
game
\"
name=
\"
hobby
\"
/>
\r\n
게임/오락
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
pic
\"
name=
\"
hobby
\"
/>
\r\n
사진/편집/촬영/영상
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
inv
\"
name=
\"
hobby
\"
/>
\r\n
제테크/투자
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
cok/fod
\"
name=
\"
hobby
\"
/>
\r\n
요리/음식/맛집
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
fas/bea
\"
name=
\"
hobby
\"
/>
\r\n
패션/뷰티/코디
\r\n
</label>
\r\n
<br></br>
\r\n
<label>
\r\n
<input type=
\"
radio
\"
value=
\"
art/draw
\"
name=
\"
hobby
\"
/>
\r\n
미술/그림
\r\n
</label>
\r\n
<br></br>
\r\n
<br></br>
\r\n
<label>사진첨부</label>
\r\n
<input type=
\"
file
\"
name=
\"
photo
\"
></input>
\r\n
<br></br>
\r\n
<button type=
\"
submit
\"
>ok</button>
\r\n
</form>
\r\n
</div>
\r\n
);
\r\n
};
\r\n\r\n
export default WriteBoard;
\r\n
"
,
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
DetailBoard.js"
,[
"67"
,
"68"
,
"69"
],
"C:
\\
WYH
\\
frontend
\\
src
\\
components
\\
WriteProfile.js"
,[
"70"
,
"71"
,
"72"
,
"73"
,
"74"
,
"75"
],
"import React, { useEffect, useState } from
\"
react
\"
;
\r\n
import axios from
\"
axios
\"
;
\r\n\r\n
const WriteProfile = () => {\r
\n
const [Profile, setProfile] = useState({\r
\n
profile_photo:
\"\"
,
\r\n
created_at:
\"\"
,
\r\n
self_intro:
\"\"
,
\r\n
user_id:
\"\"
,
\r\n
user_email:
\"\"
,
\r\n
location:
\"\"
,
\r\n
age:
\"\"
,
\r\n
});
\r\n
const [Img, setImg] = useState(
\"\"
);
\r\n
const [imgBase64, setImgBase64] = useState(
\"\"
);
\r\n
const [imgFile, setImgFile] = useState(null);
\r\n\r\n
const handleChangeFile = (event) => {\r
\n
let reader = new FileReader();
\r\n
reader.onloadend = () => {\r
\n
// 2. 읽기가 완료되면 아래코드가 실행됩니다.
\r\n
const base64 = reader.result;
\r\n
if (base64) {\r
\n
setImgBase64(base64.toString()); // 파일 base64 상태 업데이트
\r\n
}
\r\n
};
\r\n
if (event.target.files[0]) {\r
\n
reader.readAsDataURL(event.target.files[0]); // 1. 파일을 읽어 버퍼에 저장합니다.
\r\n
setImgFile(event.target.files[0]); // 파일 상태 업데이트
\r\n
}
\r\n
};
\r\n\r\n
const onChangeProfilePhoto = (e) =>
\r\n
setProfile({ profile_photo: e.target.value });
\r\n
const onChangeSelfIntro = (e) => setProfile({ self_intro: e.target.value });
\r\n
const onChangeLocation = (e) => setProfile({ location: e.target.value });
\r\n
const onChangeAge = (e) => setProfile({ age: e.target.value });
\r\n\r\n
useEffect(async () => {\r
\n
async function fetchData() {\r
\n
console.log(
\"
writeProfile axios get 호출
\"
);
\r\n
let res = await axios.get(
\"
http://localhost:3001/getProfileInfo
\"
);
\r\n
console.log(res);
\r\n
console.dir(res.data[0]);
\r\n
if (res.data[0] != undefined) {\r
\n
setProfile(res.data[0]);
\r\n
setImg(
\"
http://localhost:3001/uploads/
\"
+ res.data[0].profile_photo);
\r\n
}
\r\n
}
\r\n
fetchData();
\r\n
}, []);
\r\n\r\n
return (
\r\n
<div>
\r\n
<label>기존 프로필 사진</label>
\r\n
<br></br>
\r\n
<img src=
{
Img
}
width=
\"
200px
\"
height=
\"
200px
\"
></img>
\r\n
<br></br>
\r\n
<label>선택한 프로필 사진</label>
\r\n
<br></br>
\r\n
{/* <div
\r\n
style={{ backgroundColor:
\"
#efefef
\"
, width:
\"
200px
\"
, height:
\"
200px
\"
}}
\r\n
> */}
\r\n
<img src=
{
imgBase64
}
width=
\"
200px
\"
height=
\"
200px
\"
/>
\r\n
{/* </div> */}
\r\n
<form
\r\n
method=
\"
post
\"\r\n
action=
\"
http://localhost:3001/writeProfile
\"\r\n
encType=
\"
multipart/form-data
\"\r\n
>
\r\n
<label>프로필 사진</label>
\r\n
<input
\r\n
type=
\"
file
\"\r\n
name=
\"
photo
\"\r\n
//value=
\"
http://localhost:3001/uploads/
\"
+`
{
Profile.profile_photo
}
`
\r\n
// onChange=
{
onChangeProfilePhoto
}
\r\n
onChange=
{
handleChangeFile
}
\r\n
></input>
\r\n
<br></br>
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
self_intro
\"\r\n
placeholder=
\"
간단한 자기소개 및 관심사
\"\r\n
value=
{
Profile.self_intro
}
\r\n
onChange=
{
onChangeSelfIntro
}
\r\n
></input>
\r\n
<br></br>
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
age
\"\r\n
placeholder=
\"
나이
\"\r\n
value=
{
Profile.age
}
\r\n
onChange=
{
onChangeAge
}
\r\n
></input>
\r\n
<br></br>
\r\n
<input
\r\n
type=
\"
text
\"\r\n
name=
\"
loc
\"\r\n
placeholder=
\"
사는 곳
\"\r\n
value=
{
Profile.location
}
\r\n
onChange=
{
onChangeLocation
}
\r\n
></input>
\r\n
<br></br>
\r\n
<button type=
\"
submit
\"
>작성 완료</button>
\r\n
</form>
\r\n
</div>
\r\n
);
\r\n
};
\r\n\r\n
export default WriteProfile;
\r\n
"
,{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"77"
,
"line"
:
1
,
"column"
:
17
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
1
,
"endColumn"
:
26
},{
"ruleId"
:
"80"
,
"replacedBy"
:
"81"
},{
"ruleId"
:
"82"
,
"replacedBy"
:
"83"
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"85"
,
"line"
:
29
,
"column"
:
13
,
"nodeType"
:
"86"
,
"endLine"
:
41
,
"endColumn"
:
4
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"87"
,
"line"
:
41
,
"column"
:
6
,
"nodeType"
:
"88"
,
"endLine"
:
41
,
"endColumn"
:
8
,
"suggestions"
:
"89"
},{
"ruleId"
:
"90"
,
"severity"
:
1
,
"message"
:
"91"
,
"line"
:
51
,
"column"
:
15
,
"nodeType"
:
"92"
,
"endLine"
:
51
,
"endColumn"
:
59
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"93"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
2
,
"endColumn"
:
15
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"85"
,
"line"
:
13
,
"column"
:
13
,
"nodeType"
:
"86"
,
"endLine"
:
34
,
"endColumn"
:
4
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"94"
,
"line"
:
34
,
"column"
:
6
,
"nodeType"
:
"88"
,
"endLine"
:
34
,
"endColumn"
:
8
,
"suggestions"
:
"95"
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"93"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
2
,
"endColumn"
:
15
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"96"
,
"line"
:
3
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
3
,
"endColumn"
:
14
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"96"
,
"line"
:
2
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
2
,
"endColumn"
:
14
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"97"
,
"line"
:
4
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
4
,
"endColumn"
:
15
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"98"
,
"line"
:
5
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
5
,
"endColumn"
:
17
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"99"
,
"line"
:
6
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
6
,
"endColumn"
:
15
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"100"
,
"line"
:
10
,
"column"
:
9
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
10
,
"endColumn"
:
22
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"85"
,
"line"
:
31
,
"column"
:
13
,
"nodeType"
:
"86"
,
"endLine"
:
47
,
"endColumn"
:
4
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"101"
,
"line"
:
47
,
"column"
:
6
,
"nodeType"
:
"88"
,
"endLine"
:
47
,
"endColumn"
:
8
,
"suggestions"
:
"102"
},{
"ruleId"
:
"90"
,
"severity"
:
1
,
"message"
:
"91"
,
"line"
:
59
,
"column"
:
9
,
"nodeType"
:
"92"
,
"endLine"
:
59
,
"endColumn"
:
71
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"103"
,
"line"
:
16
,
"column"
:
10
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
16
,
"endColumn"
:
17
},{
"ruleId"
:
"76"
,
"severity"
:
1
,
"message"
:
"104"
,
"line"
:
33
,
"column"
:
9
,
"nodeType"
:
"78"
,
"messageId"
:
"79"
,
"endLine"
:
33
,
"endColumn"
:
29
},{
"ruleId"
:
"84"
,
"severity"
:
1
,
"message"
:
"85"
,
"line"
:
39
,
"column"
:
13
,
"nodeType"
:
"86"
,
"endLine"
:
51
,
"endColumn"
:
4
},{
"ruleId"
:
"105"
,
"severity"
:
1
,
"message"
:
"106"
,
"line"
:
45
,
"column"
:
23
,
"nodeType"
:
"107"
,
"messageId"
:
"108"
,
"endLine"
:
45
,
"endColumn"
:
25
},{
"ruleId"
:
"90"
,
"severity"
:
1
,
"message"
:
"91"
,
"line"
:
57
,
"column"
:
7
,
"nodeType"
:
"92"
,
"endLine"
:
57
,
"endColumn"
:
51
},{
"ruleId"
:
"90"
,
"severity"
:
1
,
"message"
:
"91"
,
"line"
:
64
,
"column"
:
7
,
"nodeType"
:
"92"
,
"endLine"
:
64
,
"endColumn"
:
59
},
"no-unused-vars"
,
"'Component' is defined but never used."
,
"Identifier"
,
"unusedVar"
,
"no-native-reassign"
,[
"109"
],
"no-negated-in-lhs"
,[
"110"
],
"react-hooks/exhaustive-deps"
,
"Effect callbacks are synchronous to prevent race conditions. Put the async function inside:
\n\n
useEffect(() => {\n async function fetchData() {\n // You can await here
\n
const response = await MyAPI.getData(someId);
\n
// ...
\n
}
\n
fetchData();
\n
}, [someId]); // Or [] if effect doesn't need props or state
\n\n
Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching"
,
"ArrowFunctionExpression"
,
"React Hook useEffect has a missing dependency: 'email'. Either include it or remove the dependency array."
,
"ArrayExpression"
,[
"111"
],
"jsx-a11y/alt-text"
,
"img elements must have an alt prop, either with meaningful text, or an empty string for decorative images."
,
"JSXOpeningElement"
,
"'Route' is defined but never used."
,
"React Hook useEffect has a missing dependency: 'input'. Either include it or remove the dependency array."
,[
"112"
],
"'post' is defined but never used."
,
"'title' is assigned a value but never used."
,
"'content' is assigned a value but never used."
,
"'hobby' is assigned a value but never used."
,
"'onChangeHobby' is assigned a value but never used."
,
"React Hook useEffect has missing dependencies: 'Board' and 'board_id'. Either include them or remove the dependency array."
,[
"113"
],
"'imgFile' is assigned a value but never used."
,
"'onChangeProfilePhoto' is assigned a value but never used."
,
"eqeqeq"
,
"Expected '!==' and instead saw '!='."
,
"BinaryExpression"
,
"unexpected"
,
"no-global-assign"
,
"no-unsafe-negation"
,{
"desc"
:
"114"
,
"fix"
:
"115"
},{
"desc"
:
"116"
,
"fix"
:
"117"
},{
"desc"
:
"118"
,
"fix"
:
"119"
},
"Update the dependencies array to be: [email]"
,{
"range"
:
"120"
,
"text"
:
"121"
},
"Update the dependencies array to be: [input]"
,{
"range"
:
"122"
,
"text"
:
"123"
},
"Update the dependencies array to be: [Board, board_id]"
,{
"range"
:
"124"
,
"text"
:
"125"
},[
1071
,
1073
],
"[email]"
,[
988
,
990
],
"[input]"
,[
1309
,
1311
],
"[Board, board_id]"
]
\ No newline at end of file
\ No newline at end of file
This diff is collapsed.
Click to expand it.
frontend/src/components/Board.js
+
30
−
5
View file @
ac5636ad
...
@@ -4,6 +4,11 @@ import axios from "axios";
...
@@ -4,6 +4,11 @@ import axios from "axios";
const
Board
=
()
=>
{
const
Board
=
()
=>
{
const
[
response
,
setResponse
]
=
useState
([]);
const
[
response
,
setResponse
]
=
useState
([]);
const
[
input
,
setInput
]
=
useState
(
""
);
const
handleInputChange
=
(
e
)
=>
{
setInput
(
e
.
target
.
value
);
console
.
log
(
input
);
};
useEffect
(
async
()
=>
{
useEffect
(
async
()
=>
{
// try {
// try {
...
@@ -19,13 +24,27 @@ const Board = () => {
...
@@ -19,13 +24,27 @@ const Board = () => {
// }
// }
async
function
fetchData
()
{
async
function
fetchData
()
{
console
.
log
(
"
react board get axios 호출
"
);
console
.
log
(
"
react board get axios 호출
"
);
const
result
=
await
axios
.
get
(
"
http://localhost:3001/board
"
);
const
result
=
await
axios
.
get
(
"
http://localhost:3001/board
"
,
{
input
:
input
,
});
console
.
log
(
result
.
data
);
console
.
log
(
result
.
data
);
setResponse
(
result
.
data
);
setResponse
(
result
.
data
);
}
}
fetchData
();
fetchData
();
},
[]);
},
[]);
const
handleOnSubmit
=
()
=>
{
async
function
fetchData2
()
{
console
.
log
(
"
react board search axios 호출
"
);
const
result2
=
await
axios
.
post
(
"
http://localhost:3001/searchBoard
"
,
{
input
:
input
,
});
console
.
log
(
result2
.
data
);
setResponse
(
result2
.
data
);
}
fetchData2
();
};
return
(
return
(
<
div
>
<
div
>
<
button
>
<
button
>
...
@@ -34,10 +53,16 @@ const Board = () => {
...
@@ -34,10 +53,16 @@ const Board = () => {
<
button
>
<
button
>
<
Link
to
=
"
/updateProf
"
>
프로필
작성
<
/Link
>
<
Link
to
=
"
/updateProf
"
>
프로필
작성
<
/Link
>
<
/button
>
<
/button
>
<
form
action
=
"
http://localhost:3001/searchBoard
"
method
=
"
post
"
>
<
input
type
=
"
text
"
name
=
"
searchKeyword
"
><
/input
>
<
input
<
button
type
=
"
submit
"
>
게시글검색
<
/button
>
type
=
"
text
"
<
/form
>
//name="searchKeyword"
onChange
=
{
handleInputChange
}
><
/input
>
<
button
type
=
"
submit
"
onClick
=
{
handleOnSubmit
}
>
게시글검색
<
/button
>
<
ol
>
<
ol
>
{
response
.
map
((
res
)
=>
(
{
response
.
map
((
res
)
=>
(
<
li
key
=
{
res
.
_id
}
>
<
li
key
=
{
res
.
_id
}
>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment