messengerController,
messengerRuter를 알아본다.
const {
getFriends,
messageUploadDB,
messageGet,
ImageMessageSend,
} = require('../controller/messengerController')
const { authMiddleware } = require('../middleware/authMiddleware')
///authMiddle는 아래아래에서 설명 예정
const router = require('express').Router()
router.get('/get-friends', authMiddleware, getFriends)
///친구 불러오기 router
router.post('/send-message', authMiddleware, messageUploadDB)
///message보내고 보낸 message DB에 upload
router.get('/get-message/:id', authMiddleware, messageGet)
///message를 불러오는 router
router.post('/image-message-send', authMiddleware, ImageMessageSend)
///이미지를 보내는 router
module.exports = router
const formidable = require('formidable')
const User = require('../models/authModel')
const messageModel = require('../models/messageModel')
const fs = require('fs')
module.exports.getFriends = async (req, res) => {
const myId = req.myId
///authMiddleware에서 cookie에 담긴 token을
///decode해서 req.myId에 id를 담아줌.
///authMiddleware를 참조할 것.
try {
const friendGet = await User.find({
_id: {
$ne: myId,
},
})
///friend를 get 하는데 $ne는 monogo query로
///not equal이라는 의미로 myId와는 다른
/// id만 call한다는 뜻.
/// 아해 const filter와 같은 의미임,
//const filter = friendGet.filter((d) => d.id !== myId)
res.status(200).json({ success: true, friends: friendGet })
///return해 주는데
///success:true, friends에는 위의 friendGet을
///담아서 보내준다.
} catch {
res.status(500).json({ error: { errorMessage: 'Inter 11 Server Error' } })
///error발생시, server에서 보내고,
///redux-action에서 받는 부분을 잘 봐둘것.
}
}
module.exports.messageUploadDB = async (req, res) => {
const { senderName, receiveId, message } = req.body
const senderId = req.myId
///front에서 보낸 data는 req.body로 받고,
///myId는 authMiddleware를 통해 받는다.
///authMiddleware참조할것
try {
const insertMessage = await messageModel.create({
senderId: senderId, ///req.myId로 loggedIn한 User임.
senderName: senderName, ///front에서 받음.
receiveId: receiveId, ///front에서 받음.
message: {
text: message,
image: '',
},
///image보내는 부분은 아래에서 다룰 예정
})
res.status(201).json({
success: true,
message: insertMessage,
})
///success:true와 create한 insertMessage를 res해 준다.
} catch (error) {
res.status(500).json({
error: {
errorMessage: 'Internal Sever Error',
},
})
///error발생시, res해 주는부분.
}
}
module.exports.messageGet = async (req, res) => {
const myId = req.myId
const friendId = req.params.id
///params.id는
/// router.get('/get-message/:id', authMiddleware, messageGet)
/// 와 같이 url을 통해서 전달 되는것을, req,params로
/// 받을 수 있다.
///DB에 담긴 message를 불러 들이는데, {}부분은
///mongoDB query로 아래 // 부분을 mongo Query로
///나타낸 것이다.
try {
let getAllMessage = await messageModel.find({
$or: [
{
$and: [
{
senderId: {
$eq: myId,
},
},
{
receiveId: {
$eq: friendId,
},
},
],
},
{
$and: [
{
senderId: {
$eq: friendId,
},
},
{
receiveId: {
$eq: myId,
},
},
],
},
],
})
// getAllMessage = getAllMessage.filter(
// (m) =>
// (m.senderId === myId && m.receiveId === friendId) ||
// (m.receiveId === myId && m.senderId === friendId)
// )
///mongoQuery를 JS로 풀어쓴것.
res.status(200).json({
success: true,
message: getAllMessage,
})
///filter된 message를 message에 담아서 res해 준다.
} catch (error) {
res.status(500).json({
error: {
errorMessage: 'Internal Error',
},
})
error발생시 대처하는 부분.
}
}
module.exports.ImageMessageSend = (req, res) => {
///이미지를 front에서 받아서 처리하는 API
const senderId = req.myId
const form = formidable()
///이미지, text등 여러 종류의 data를 한번에 받을떄, 사용
form.parse(req, (err, fields, files) => {
const { senderName, receiveId, imageName } = fields
///fildes로 file외의 data를 받음.
const newPath = __dirname + `../../../frontend/public/image/${imageName}`
///file이 저장될 주소를 만들어줌.
files.image.originalFilename = imageName
///받은 file의 originalFilename을
///fields로 받은 imageName으로 바꾼다.
try {
///fs를 이용해 client에서 받은 file을 newPath에
///save한다.
fs.copyFile(files.image.filepath, newPath, async (err) => {
if (err) {
res.status(500).json({
error: {
errorMessage: 'Image upload fail',
},
})
} else {
const insertMessage = await messageModel.create({
senderId: senderId,
senderName: senderName,
receiveId: receiveId,
message: {
text: '',
image: files.image.originalFilename,
},
})
res.status(201).json({
success: true,
message: insertMessage,
})
}
})
} catch (error) {
res.status(500).json({
error: {
errorMessage: 'Internal Sever Error',
},
})
}
})
}
The character creation process in bitlife is both fun and engaging, allowing players to customize their characters with unique traits and backgrounds, setting the stage for countless adventures and life experiences that await them in this captivating life simulator.