NodeJS๋ฅผ ํตํ ์ฌ์ฉ์ ํ์๊ฐ์ ๊ตฌํ
์ฌ์ฉ์ ํ์๊ฐ์ ์ ๊ตฌํํ๊ธฐ ์ํด Express ์๋ฒ๋ฅผ ์์ฑํ๊ณ ์ค์ ์ ํด์ค๋ค.
userRoute์ route์์ /app/users๋ก ๋ณด๋ด์ฃผ๊ณ src/app/user์ userController.js ํ์ผ์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด๊ณ userService์์๋ Create, Update, Delete ๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค. userProvider๋ Read ๋ก์ง์ ์ฒ๋ฆฌ ํ ์์ ์ด๋ค.
userDao์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๊ทผํ๊ฒ ๋ ๊ฒ์ด๋ค.
userRoute -> userController -> userService / userProvider -> userDao
import express, { json, urlencoded } from 'express';
import methodOverride from 'method-override';
import logger from 'morgan';
import routes from './config/route.js';
import dotenv from 'dotenv';
import cookieParser from 'cookie-parser';
dotenv.config();
const port = process.env.SERVER_PORT || 5000;
class App {
constructor() {
this.app = express();
this.setMiddleWare();
this.getRouting();
this.listen();
}
setMiddleWare() {
this.app.use(logger('dev'));
this.app.use(json());
this.app.use(urlencoded({ extended: false }));
this.app.use(methodOverride());
this.app.use(cookieParser());
}
getRouting() {
this.app.use('/', routes);
}
listen() {
this.app.listen(port, () => {
console.log(`Server is running on ${port}`);
});
}
}
export default new App().app;
์ฌ๊ธฐ์ express ์ค์ , ๋ผ์ฐํ ์ค์ ์ ํด์ฃผ๊ฒ ๋๋ค. ๊ทธ ์ธ์ ๋ฏธ๋ค์จ์ด๋ Json ํ์์ ์ฝ์ด์ค๊ธฐ ์ํ ์ค์ , ์ฟ ํค ์ค์ ์ด ์๋ค.
๐ route.js
import { Router } from 'express';
import userRoute from '../src/app/user/userRoute.js';
import authRoute from '../src/auth/authRoute.js';
const router = Router();
router.use('/app/users', userRoute);
router.use('/auth', authRoute);
export default router;
route.js ํ์ผ์์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๊ณ userRoute์ ์๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ๊ฒ ๋๋ค.
authRoute๋ JWT ํ ํฐ์ ์ธ์ฆํด์ฃผ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ๋ก์ด๋ค.
๐ userRoute.js
import { Router } from 'express';
const router = Router();
import userController from './userController.js';
import { authentication, reissuanceToken } from '../../../config/jwtMiddleware.js';
router.post('/', userController.postUser); // ํ์๊ฐ์
API
router.post('/login', userController.login); // ๋ก๊ทธ์ธ API
export default router;
ํ์๊ฐ์ ์ POST ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ Body ๊ฐ์ ๋ฐ๊ฒ ๋๋ค. ๋ผ์ฐํฐ ์ค์ ์ ํด๋์๊ธฐ ๋๋ฌธ์ '/app/users' ๊ฒฝ๋ก๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด userController.postUser ์ ํจ์๊ฐ ์คํ๋๊ณ ํ์๊ฐ์ ์ด ์คํ๋๋ค.
๋ก๊ทธ์ธ ๋ํ POST ๋ฉ์๋๋ฅผ ์ด์ฉํด '/app/users/login' ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด userController.login์ด ์คํ๋๋ค.
๐ userController.js
postUser = async function (req, res) {
const parsedType = parseInt(req.body.distinction); // ํ์ ๊ตฌ๋ถ
console.log(parsedType);
console.log(req.body.distinction);
// type 1. ์ฌ์ฉ์, 2.์กฐ์ง/๊ธฐ๊ด
if (parsedType === 1) {
// ์ฌ์ฉ์ ํ์๊ฐ์
// ์ฌ์ฉ์ ํ
์ด๋ธ์ ์ ๋ณด ์
๋ ฅ
const userId = req.body.id;
const password = req.body.password;
const userName = req.body.name;
const phoneNumber = req.body.phoneNumber;
const address = req.body.address;
const type = req.body.distinction; // req.body.type
const info = req.body.info;
ํ์ฌ ํด๋ผ์ด์ธํธ์ ํ์๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ body๋ก ๋ฐ๋ ๊ฐ์ ํต์ผํ์ง ์์๋ค. ๊ทธ๋์ ๋ณ์๋ฅผ ๋ด๋ ์ฝ๋๊ฐ ์กฐ๊ธ ๋๋ฝ์ง๋ง ์ด๋ ์ถํ ์ฝ๋๋ฅผ ๋ฐ๊ฟ ๊ฒ์ด๋ค.
์๋ ์ด๋ ๊ฒ ์ ์ธํ๋ ๊ฒ์ด ๋ง๋ค.
const { id, password, userName, phoneNumber, address, type, info } = req.body
๊ทธ๋ฅ ์ผ๋ฐ ๋ก๊ทธ์ธ์ด ์๋๋ผ ์ฌ์ฉ์์ ๊ธฐ์ ์ ๊ตฌ๋ณํ์ฌ ๋ก๊ทธ์ธ์ ๊ตฌํํ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ธ์ง ๊ธฐ์ ์ธ์ง ๊ตฌ๋ณํ๋ type์ body์ ๋ด์์ ์ด๋ฅผ ํตํด ์๋ฒ์์ ๊ตฌ๋ณ์ ํด์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก ํธ์์ ๋ชจ๋ ๋ฌธ์์ด ํํ๋ก ์ฃผ์๊ธฐ ๋๋ฌธ์ ์ ์ํ ๋ณ์๋ก ๋ฐ๊พธ์ด ์ฃผ๋ parsedInt๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํด ์ฃผ์๋ค.
if (!userId) return res.send(NICKNAME_EMPTY); // code 2000
if (userId.length > 20) return res.send(ID_LENGTH_ERROR); // code 2012
if (!password) return res.send(PASSWORD_EMPTY); // code 2001
if (password.length < 6 || password.length > 20) return res.send(PASSWORD_LENGTH_ERROR); // code 2013
if (!userName) return res.send(SIGNUP_NAME_EMPTY); // code 2005
if (!address) return res.send(ADDRESS_EMPTY); // code 2010
if (!phoneNumber) return res.send(PHONENUMBER_EMPTY); //code 2011
const signUpResponse = await createUser(userId, password, userName, phoneNumber, address, type, info);
return res.send(signUpResponse);
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์๋ค. ํด๋ผ์ด์ธํธ๋จ์์๋ ์์ธ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง ์์ธ์ฒ๋ฆฌ๋ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ๋ฐฑ์๋ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ createUser๋ userService์ ์๋ ํจ์์ด๋ค. ์ด๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์ ์์ฑ์ด ๋์๋์ง ์คํจํ์๋์ง ์ ์ ์๋ค.
๐ userService.js
export async function createUser(userId, password, userName, phoneNumber, address, type, info) {
const connection = await pool.getConnection(async (conn) => conn);
try {
const userIdCheckResult = await userIdCheck(userId);
if (userIdCheckResult.length > 0) return ID_ALREADY_EXISTS; // id๊ฐ ์ด๋ฏธ ์กด์ฌํ ๊ฒฝ์ฐ
const hashedPassword = createHash('sha512').update(password).digest('hex');
const params = [userId, hashedPassword, userName, phoneNumber, address, type, info];
const createUserIdResult = await createUserAccount(connection, params);
console.log(`์ถ๊ฐ๋ ์ผ๋ฐ ์ฌ์ฉ์ Idx: ${createUserIdResult[0].insertId}, ID: ${userId}`);
connection.release();
return SIGNUP_SUCCESS;
} catch (err) {
console.log(err);
return SERVER_CONNECT_ERROR;
}
}
createUser ํจ์๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ ํ๊ณ ์ฌ์ฉ์์ ์์ด๋๊ฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์กด์ฌํ๋์ง ํ์ธํ๋ค.
userDao์ ์๋ createUserAccount๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์์ ์์ด๋๊ฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์กด์ฌํ์ง ์๋ ๋ค๋ฉด ํ์๊ฐ์ ์ ์งํ์ํจ๋ค.
๐ userProvider.js
export async function userIdCheck(userId) {
const connection = await pool.getConnection(async (conn) => conn);
try {
const userIdRow = await selectUserId(connection, userId);
return userIdRow;
} catch (err) {
} finally {
connection.release();
}
}
userProvider์์๋ Id๊ฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์กด์ฌํ๋์ง ํ์ธํ๋ ํจ์๊ฐ ์๋ค.
์ด๋ฌํ ๋ก์ง์ ํตํด ํ์๊ฐ์ ์ด ์๋ฃ๋๋ค. API ํ ์คํธ๋ Postman์ ์ฌ์ฉํ์ฌ body๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฐ์ ์ ์๋ค.
'๐ป BackEnd > ๐ฉ NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] [NodeJS] ๊ฐ๋จํ ๋ก๊ทธ์ธ ๊ตฌํ (0) | 2022.05.02 |
---|---|
[Network] [NodeJS] Socket.IO๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฌธ์๋ฅผ ๋ณด๋ด๋ฉด ๋๋ฌธ์๋ก ๋ฐ๊พธ๊ธฐ (0) | 2022.04.21 |
[NodeJS] ํ๋ก์ ํธ ํด๋ ๊ตฌ์กฐ ๋ง๋ค๊ธฐ (0) | 2022.03.23 |