Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
students
messenger
Commits
f6c113bd
Commit
f6c113bd
authored
Jan 18, 2021
by
JeongYeonwoo
Browse files
임시완성 profile
parent
af72d9ac
Changes
5
Hide whitespace changes
Inline
Side-by-side
client/src/Components/Chat.js
View file @
f6c113bd
...
@@ -25,6 +25,10 @@ function Chat(props) {
...
@@ -25,6 +25,10 @@ function Chat(props) {
useEffect
(()
=>
{
useEffect
(()
=>
{
setChat
([...
chat
,
props
.
singleChat
])
setChat
([...
chat
,
props
.
singleChat
])
},
[
props
.
singleChat
])
},
[
props
.
singleChat
])
useEffect
(()
=>
{
setChat
([...
chat
,
props
.
recievedMsg
])
},
[
props
.
recievedMsg
])
return
(
return
(
...
...
client/src/Components/Menu.js
View file @
f6c113bd
...
@@ -16,7 +16,6 @@ function Menu() {
...
@@ -16,7 +16,6 @@ function Menu() {
<
Nav
className
=
"
mr-auto
"
>
<
Nav
className
=
"
mr-auto
"
>
<
Nav
.
Link
href
=
"
/home
"
>
Home
<
/Nav.Link
>
<
Nav
.
Link
href
=
"
/home
"
>
Home
<
/Nav.Link
>
<
Nav
.
Link
href
=
"
/profile
"
>
Profile
<
/Nav.Link
>
<
Nav
.
Link
href
=
"
/profile
"
>
Profile
<
/Nav.Link
>
<
Nav
.
Link
href
=
"
/hello
"
>
Hello
<
/Nav.Link
>
<
/Nav
>
<
/Nav
>
<
Link
to
=
"
./login
"
>
<
Link
to
=
"
./login
"
>
<
Button
onClick
=
{()
=>
handleLogout
()}
variant
=
"
light
"
className
=
"
ml-3
"
>
Logout
<
/Button
>
<
Button
onClick
=
{()
=>
handleLogout
()}
variant
=
"
light
"
className
=
"
ml-3
"
>
Logout
<
/Button
>
...
...
client/src/Pages/HomePage.js
View file @
f6c113bd
...
@@ -30,6 +30,7 @@ function Home() {
...
@@ -30,6 +30,7 @@ function Home() {
const
[
singleChat
,
setSingleChat
]
=
useState
(
''
)
const
[
singleChat
,
setSingleChat
]
=
useState
(
''
)
const
[
roomName
,
setRoomName
]
=
useState
(
''
)
const
[
roomName
,
setRoomName
]
=
useState
(
''
)
const
[
recievedMsg
,
setRecievedMsg
]
=
useState
(
''
)
const
handleClose
=
()
=>
setShow
(
false
);
const
handleClose
=
()
=>
setShow
(
false
);
const
handleShow
=
()
=>
setShow
(
true
);
const
handleShow
=
()
=>
setShow
(
true
);
...
@@ -80,11 +81,19 @@ function Home() {
...
@@ -80,11 +81,19 @@ function Home() {
roomName
:
roomName
,
roomName
:
roomName
,
msg
:
singleChat
msg
:
singleChat
})
})
socket
.
on
(
'
broadcast
'
,
(
msg
)
=>
{
},
[
singleChat
])
useEffect
(()
=>
{
socket
.
on
(
"
sendedMSG
"
,
(
msg
)
=>
{
console
.
log
(
msg
)
console
.
log
(
msg
)
set
SingleChat
(
msg
)
set
RecievedMsg
(
msg
)
})
})
},
[
singleChat
])
},
[])
// socket.on('broadcast', (msg) => {
// console.log(msg)
// setSingleChat(msg)
// })
// }, [singleChat])
return
(
return
(
<>
<>
...
@@ -101,7 +110,7 @@ function Home() {
...
@@ -101,7 +110,7 @@ function Home() {
<
/Tabs
>
<
/Tabs
>
<
/Col
>
<
/Col
>
<
Col
style
=
{{
padding
:
"
0
"
}}
>
<
Col
style
=
{{
padding
:
"
0
"
}}
>
{
chat
?
<
Chat
handleChatc
=
{
handleChatc
}
sendMsg
=
{
sendMsg
}
singleChat
=
{
singleChat
}
setSingleChat
=
{
setSingleChat
}
roomName
=
{
roomName
}
/> : null
}
{
chat
?
<
Chat
handleChatc
=
{
handleChatc
}
sendMsg
=
{
sendMsg
}
singleChat
=
{
singleChat
}
setSingleChat
=
{
setSingleChat
}
roomName
=
{
roomName
}
recievedMsg
=
{
recievedMsg
}
/> : null
}
<
div
style
=
{{
position
:
"
fixed
"
,
bottom
:
"
20px
"
,
right
:
"
30px
"
}}
>
<
div
style
=
{{
position
:
"
fixed
"
,
bottom
:
"
20px
"
,
right
:
"
30px
"
}}
>
<
Button
variant
=
"
primary
"
onClick
=
{
handleShow
}
size
=
"
lg
"
block
>
<
Button
variant
=
"
primary
"
onClick
=
{
handleShow
}
size
=
"
lg
"
block
>
...
...
client/src/Pages/ProfilePage.js
View file @
f6c113bd
...
@@ -53,24 +53,21 @@ function ProfilePage() {
...
@@ -53,24 +53,21 @@ function ProfilePage() {
e
.
preventDefault
()
e
.
preventDefault
()
if
(
changed
)
{
if
(
changed
)
{
const
formData
=
new
FormData
()
const
formData
=
new
FormData
()
formData
.
append
(
'
imageUrl
'
,
user
.
imageUrl
[
0
])
if
(
user
.
imageUrl
)
{
formData
.
append
(
'
newNickname
'
,
user
.
nickname
)
formData
.
append
(
'
imageUrl
'
,
user
.
imageUrl
[
0
])
}
formData
.
append
(
'
newNickname
'
,
user
.
nickname
)
//얘네는 req.body로 들어감
try
{
try
{
if
(
userId
&&
user
.
imageUrl
)
{
if
(
userId
)
{
await
axios
.
put
(
`/users/
${
userId
}
`
,
formData
)
await
axios
.
put
(
`/users/
${
userId
}
`
,
formData
)
alert
(
'
저장되었습니다.
'
)
alert
(
'
저장되었습니다.
'
)
window
.
location
.
reload
()
window
.
location
.
reload
()
}
}
// else{
// console.log("삐빅")
// const formData = new FormData()
// formData.append('newNickname', user.nickname)
// const response = await axios.put(`/users/${userId}`, formData)
// }
}
catch
(
error
)
{
}
catch
(
error
)
{
catchErrors
(
error
,
setError
)
catchErrors
(
error
,
setError
)
}
}
}
else
{
}
else
{
alert
(
'
변경사항이 없습니다.
'
)
alert
(
'
변경사항이 없습니다.
'
)
}
}
}
}
...
@@ -79,35 +76,50 @@ function ProfilePage() {
...
@@ -79,35 +76,50 @@ function ProfilePage() {
getProfile
(
userId
)
getProfile
(
userId
)
},
[
userId
])
},
[
userId
])
// const [img, setImg] = useState('')
// function bbb(e) {
// const { name } = e.target
// let reader = new FileReader();
// reader.onload = function (e){
// console.log(e.target.result)
// // setImg(e.target.result)
// // setProfileimg
// // console.log(user,name)
// setUser({...user, [name]: e.target.result})
// };
// reader.readAsDataURL(e.target.files[0])
// )
return
(
return
(
<>
<>
<
Menu
/>
<
Menu
/>
<
Container
className
=
'
border
'
fluid
>
<
Container
>
<
Row
>
<
Row
>
<
Col
sm
=
{
4
}
>
<
Col
sm
=
{
4
}
>
<
Row
className
=
'
justify-content-center
'
>
<
Row
className
=
'
justify-content-center
'
>
{
user
.
profileimg
?
<
Image
src
=
{
user
.
profileimg
&&
`/images/
${
user
.
profileimg
}
`
}
style
=
{{
width
:
"
300px
"
,
height
:
"
300px
"
}}
roundedCircle
/>
:
<
Image
src
=
'
https://www.flaticon.com/svg/vstatic/svg/149/149071.svg?token=exp=1610922596~hmac=f4b972b9db509d4e3cc2eb40543b0b0f
'
style
=
{{
width
:
"
300px
"
,
height
:
"
300px
"
}}
roundedCircle
/>
}
{
user
.
profileimg
?
<
Image
src
=
{
user
.
profileimg
&&
`/images/
${
user
.
profileimg
}
`
}
style
=
{{
width
:
"
300px
"
,
height
:
"
300px
"
}}
roundedCircle
/>
:
<
Image
src
=
'
https://www.flaticon.com/svg/vstatic/svg/149/149071.svg?token=exp=1610922596~hmac=f4b972b9db509d4e3cc2eb40543b0b0f
'
style
=
{{
width
:
"
300px
"
,
height
:
"
300px
"
}}
roundedCircle
/>
}
{
/* {user.profileimg ? <><Image id='profileimg' src={user.profileimg && `/images/${user.profileimg}`} style={{ width: "300px", height: "300px" }} roundedCircle hidden={!hidden}/> */
}
{
/* <Image id='profileimg' src={user.profileimg} style={{ width: "300px", height: "300px" }} roundedCircle hidden={hidden}/></> : <Image src='https://www.flaticon.com/svg/vstatic/svg/149/149071.svg?token=exp=1610922596~hmac=f4b972b9db509d4e3cc2eb40543b0b0f' style={{ width: "300px", height: "300px" }} roundedCircle />} */
}
<
/Row
>
<
/Row
>
<
Row
className
=
'
ml-3 mt-3 justify-content-center
'
>
<
Row
className
=
'
ml-3 mt-3 justify-content-center
'
>
<
Form
className
=
"
d-flex
"
>
<
Form
className
=
"
d-flex
"
>
<
Form
.
Group
>
<
Form
.
Group
>
<
Form
.
Label
>
프로필
사진
변경
<
/Form.Label
>
<
Form
.
Label
>
프로필
사진
변경
<
/Form.Label
>
<
Form
.
Control
type
=
'
file
'
name
=
'
imageUrl
'
onChange
=
{
handleChange
}
/
>
<
Form
.
Control
type
=
'
file
'
name
=
'
imageUrl
'
onChange
=
{
handleChange
}
accept
=
'
image/*
'
/>
<
/Form.Group
>
<
/Form.Group
>
<
/Form
>
<
/Form
>
<
/Row
>
<
/Row
>
{
/* <Row className="d-flex justify-content-center mb-3">
{
/*
<Dropdown>
{img?<Image src={img}/> : <h2>아직입니다.</h2>}
<Dropdown.Toggle variant='success' id='dropdown-basic'>
<Row className='ml-3 mt-3 justify-content-center'>
프로필 사진 선택
<Form className="d-flex">
</Dropdown.Toggle>
<Form.Group>
<Dropdown.Menu>
<Form.Label>프로필 사진 변경</Form.Label>
<Dropdown.Item as='button'>홈으로</Dropdown.Item>
<Form.Control type='file' name='profileimg' onChange={bbb} accept='image/*' />
<Dropdown.Item href='/'>라이언</Dropdown.Item>
</Form.Group>
<Dropdown.Item href='/'>어피치</Dropdown.Item>
</Form>
</Dropdown.Menu>
</Dropdown>
</Row> */
}
</Row> */
}
<
/Col
>
<
/Col
>
<
Col
sm
=
{
8
}
>
<
Col
sm
=
{
8
}
>
<
Row
className
=
'
m-5 justify-content-center
'
>
<
Row
className
=
'
m-5 justify-content-center
'
>
...
...
server/controllers/user.controller.js
View file @
f6c113bd
...
@@ -2,10 +2,7 @@ import User from "../models/User.js"
...
@@ -2,10 +2,7 @@ import User from "../models/User.js"
import
isLength
from
'
validator/lib/isLength.js
'
import
isLength
from
'
validator/lib/isLength.js
'
import
isEmail
from
'
validator/lib/isEmail.js
'
import
isEmail
from
'
validator/lib/isEmail.js
'
import
bcrypt
from
"
bcryptjs
"
;
import
bcrypt
from
"
bcryptjs
"
;
import
jwt
from
'
jsonwebtoken
'
import
config
from
"
../config.js
"
import
multer
from
"
multer
"
;
import
multer
from
"
multer
"
;
import
catchErrors
from
"
../../client/src/utils/catchErrors.js
"
;
const
upload
=
multer
({
dest
:
'
uploads/
'
})
const
upload
=
multer
({
dest
:
'
uploads/
'
})
const
profileUpload
=
upload
.
fields
([
const
profileUpload
=
upload
.
fields
([
...
@@ -54,9 +51,14 @@ const update = async (req, res) => {
...
@@ -54,9 +51,14 @@ const update = async (req, res) => {
const
newNickname
=
req
.
body
.
newNickname
const
newNickname
=
req
.
body
.
newNickname
try
{
try
{
await
User
.
updateOne
({
'
username
'
:
username
},
{
'
nickname
'
:
newNickname
})
await
User
.
updateOne
({
'
username
'
:
username
},
{
'
nickname
'
:
newNickname
})
const
imageUrl
=
req
.
files
[
'
imageUrl
'
][
0
]
let
imageUrl
=
''
if
(
req
.
files
[
'
imageUrl
'
])
{
imageUrl
=
req
.
files
[
'
imageUrl
'
][
0
]
}
const
user
=
req
.
user
const
user
=
req
.
user
user
.
profileimg
=
imageUrl
.
filename
//우리가 사용할 uesr.profileimg에다가 imageUrl의 filename을 저장
if
(
req
.
files
[
'
imageUrl
'
])
{
user
.
profileimg
=
imageUrl
.
filename
//우리가 사용할 uesr.profileimg에다가 imageUrl의 filename을 저장
}
const
updatedUser
=
await
user
.
save
()
const
updatedUser
=
await
user
.
save
()
res
.
json
(
updatedUser
)
res
.
json
(
updatedUser
)
}
catch
(
error
)
{
}
catch
(
error
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment