최종 Item-Simulator 완성본!
// app.js
//express 서버 3000포트 띄우기
import routesAccount from './routes/account.js';
import routesCharacter from './routes/character.js';
import routesItem from './routes/item.js';
import express from 'express'; // 모듈 불러오기
const app = express(); // exoress()함수를 호출해서 app라는 객체생성
const PORT = 3000; // 서버기 실행될 포트, 3000번 사용
//app.get() 메서드를 사용해서 http get 요청 루트 ("/")에 대한 요청이 들어오면 "Hello World" 출력
// req = 요청 객체 res = 응답 객체
// localhost:3000/ 으로 get 요청이 들어오면 함수 실행 (req, res) => { }
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.use(express.json());
// /api 주소로 접근하였을 때, router와 TodosRouter로 클라이언트의 요청이 전달됩니다.
// app.use("/", router);
// app.use("/api", TodosRouter); // http://localhost:3000/
// localhost:3000/api
app.use('/api', [routesAccount, routesCharacter, routesItem]); // http://localhost:3000/api
// app.listen()메서드를 호출하여 서버를 시작 , 포트를 불러오고 클라이언트요청을 대기
// 서버가 성공적으로 시작되면 메세지 출력
// localhost:3000/
app.listen(PORT, () => {
console.log(PORT, '포트로 서버가 열렸어요!');
});
// / : root -> 최상위 경로
// /test1.txt -> /text/test1.txt
// /test2.txt -> /text/test2.txt
// /test3.txt -> /text/test3.txt
// /routes/account.js
// 라우터 만들기 account.js를 만들기
// /api/signup api만들기 post로 만들기
// id password로 전달 -> consol.log로 만들어서
// signup에서 유저정보 생성하여 users 배열에 저장.
// 로그인 만들기 (signin) => post
// 회원조회 만들기 (account) => get
import express from 'express';
const router = express.Router();
// '/' => http://localhost:3000/api/signup 으로 요청이 들어오면 함수 실행.
// request : 내가 받은 정보
// response : 내가 보낼 정보
router.post('/signup', (request, response) => {
const { id, password } = request.body; // { id: 'test', password: 'test' }
const userUid = users.length + 1;
const characters = [];
const createdUser = { id, password, userUid, characters };
users.push(createdUser);
return response.json(createdUser);
});
// id, pw 받아서
// users 배열에서 id, pw가 일치하는지 확인
// 일치하면 로그인되었습니다. 출력
router.post('/signin', function (request, response) {
const { id, password } = request.body;
// 일반 함수를 사용하여 사용자 찾기
// const login = function (user) {
// return user.id == id && user.password === password;
// };
const userLogin = users.find(
(user) => user.id === id && user.password === password,
);
// console.log(user);
if (!userLogin) {
return response.json('로그인실패');
}
return response.json(userLogin);
});
// id를 받아서
// users 배열에서 id가 일치하는지 확인
// 일치하면 해당 id의 정보를 출력
router.get('/account', (request, response) => {
const { id } = request.query; // { id: 'test', password: 'test' }
const account = function (user) {
return user.id === id;
};
const userAccount = users.find(account);
// console.log(user);
if (!userAccount) {
return response.json('유저를 찾지 못했습니다.');
}
return response.json(userAccount);
});
// const { id } = request.body; // { id: 'test', password: 'test' }
// const account = function (user) {
// return user.id === id;
// };
// const userAccount = users.find(account);
// // console.log(user);
// if (userAccount) {
// return response.json(`유저 ${id} 입니다`);
// }
// //
// else {
// return response.json('유저를 찾지 못했습니다.');
// }
// });
export const users = []; //users 내보내기
export default router;
//routes/character.js
//id 패스워드 말고 캐릭터로
// create , status , item
// users 에서 id와 password가 일치하는 유저 찾기 ㅜㅜ
// 찾은 유저 정보안에 charater에 nickname 과 level 1을 넣어 주기
// 그리고 다른 api 에서 users 로그찍어서 확인해보기
// 캐릭터 삭제, 조회
// id, password가 아닌 userUid 를 받아서 캐릭터 생성
// 캐릭터 정보가 바로 나오도록
import { users } from '../routes/account.js';
import express, { response } from 'express';
// import { items } from '../routes/item.js';
const router = express.Router();
router.post('/create', (request, response) => {
const { nickname, userUid } = request.body;
const user = users.find((user) => {
return user.userUid === Number(userUid);
});
if (!user) {
return response.json('id 또는 password가 잘못입력되었습니다.');
}
let character = { nickname: nickname, level: 1 };
user.characters.push(character);
//else안쓰는 이유 이미 다 걸러져서
return response.json(user);
});
// 캐릭터 삭제 delete
// path : '/delete'
// userUid를 받아서 해당 userUid를 가진 유저의 캐릭터를 삭제
router.delete('/delete', (request, response) => {
const { nickname, userUid } = request.body;
const user = users.find((user) => {
// console.log(user);
return user.userUid === Number(userUid);
});
if (!user) {
return response.json('존재하지 않는 유저 입니다.');
}
user.characters = user.characters.filter(
(character) => character.nickname !== nickname,
);
return response.json({
message: `${nickname}이 삭제되었습니다.`,
users,
});
// console.log(user);
// if (user.userUid === +userUid) {
// // console.log(user);
// return response.json({
// message: `${nickname}이 삭제되었습니다.`,
// });
// }
// return response.json({
// message: ' 불러오기 실패! ',
// });
// return response(user, `${nickname}이 삭제가 실패 되었습니다.`);
});
// 캐릭터 조회 get
// path : '/status'
// userUid를 받아서 해당 userUid를 가진 유저의 캐릭터 정보를 조회
router.get('/status', (request, response) => {
const { nickname, userUid } = request.query;
const user = users.find((user) => user.userUid === Number(userUid));
// console.log(users);
if (!user) {
// console.log(user);
return response.json('존재하지 않는 유저 입니다.');
}
const foundCharacter = user.characters.find(
(character) => character.nickname === nickname,
);
// console.log(user);
if (!foundCharacter) {
return response.json(`${nickname} 캐릭터를 찾지 못했습니다.`);
}
//
return response.json(foundCharacter);
});
//users 내보내기
export default router;
//
//[
// {
// id: 'abc',
// password: '1234',
// character: { nickname: '마법사', level: 1 }
// }
//]
// const obj = {};
// console.log(obj.character); // undefined
// obj.character = { nickname: '마법사', level: 1 };
// console.log(obj.character); // { nickname: '마법사', level: 1 }
// const arr = [1, 2, 3, 4, 5];
// const result = arr.filter(function(item){
// return item!==3;
// })
// /routes/item.js
import express from 'express';
import charactersInfo from './character.js';
// import { users } from './account.js';
const router = express.Router();
// 1. item 생성 , post
// 2. 수정(가격은 수정x), updateItem put
// 3. (아이템 코드, 아이템 명, 아이템 가격) 내용만 조회
const items = [];
// const item = {item_code, item_name, item_stat, item_price};
router.post('/makeItem', (request, response) => {
const { item_code, item_name, item_stat, item_price } = request.body;
items.push({ item_code, item_name, item_stat, item_price });
return response.json({ items });
});
// 수정 완료
router.put('/editItem', (request, response) => {
const { item_code, item_name, item_stat } = request.body;
const item = items.find((item) => item.item_code === item_code);
if (item) {
item.item_name = item_name; // 이름 업데이트
item.item_stat = item_stat; // 상태 업데이트
}
return response.json({ items });
});
router.get('/itemCheck', (request, response) => {
const { item_code } = request.query;
const item = items.find((item) => item.item_code === item_code);
// console.log('//////////////////////////////');
// console.log(item);
// console.log(+item);
if (!item) {
return response.json('정보가 잘못 입력되었습니다.');
}
return response.json({ item });
});
export default router;
다시 와서 보게 될 때 보다 더 코드를 잘 볼 수 있는 내가 있길..!