https://velog.io/@skh9797/%EC%8B%A4%EC%8B%9C%EA%B0%84-%EA%B2%BD%EB%A7%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0
프로젝트 구조 갖추기
1. 프로젝트 생성
" NodeAuction " 프로젝트 생성
node-auction 폴더를 만든 후 그 안에 package.json 작성
npm i
DB로는 MySQL 을 사용
npm i sequelize sequelize-cli mysql2
npx sequelize init
📌package.json
{
"name": "node-auction",
"version": "0.0.1",
"description": "노드 경매 시스템",
"main": "app.js",
"scripts": {
"start": "nodemon app"
},
"author": "Zero Cho",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.0.1",
"cookie-parser": "^1.4.4",
"dotenv": "^16.0.0",
"express": "^4.17.1",
"express-session": "^1.17.0",
"morgan": "^1.9.1",
"multer": "^1.4.2",
"mysql2": "^2.1.0",
"node-schedule": "^2.1.1",
"nunjucks": "^3.2.0",
"passport": "^0.6.0",
"passport-local": "^1.0.0",
"sequelize": "^6.19.2",
"sequelize-cli": "^6.4.1",
"socket.io": "^4.5.1",
"sse": "^0.0.8"
},
"devDependencies": {
"chokidar": "^3.5.3",
"nodemon": "^2.0.16"
}
}
2. 모델 작성하기
user.js : 사용자의 이메일, 닉네임, 비밀번호와 자금
good.js : 상품의 이름 / 사진, / 시장 가격
auctions.js : 입찰가 (bid) 와 입살 시 전다랄 메시지 (msg)
config / config.json에 MYSQL 데이터베이스 설정 직상
📌 config / config.json
{
"development": {
"username": "root",
"password": "nodejsbook", // 내가 설정한 비밀번호 작성
"database": "nodeauction",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
3. 데이터베이스 생성하기
nodeauction 데이터 베이스를 생성
npx sequelize db:create
4. DB 관계 설정하기
models / index.js
한 사용자가 여러 상품을 등록 가능 (user-good, as: owner)
한 사용자가 여러 상품을 낙찰 가능 (user-good, as: sold)
한 사용자가 여러 번 경매 입찰 가능 (user-auction)
한 상품에 대해 여러 번 경매 입찰 가능 (good-auction)
as로 설정한 것은 OwnerId, SoldId로 상품 모델에 컬럼이 추가됨
📌
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const fs = require('fs');
const path = require('path');
const config = require('../config/config')[env];
const db = {};
const sequelize = new Sequelize(
config.database, config.username, config.password, config,
);
db.sequelize = sequelize;
const basename = path.basename(__filename);
fs
.readdirSync(__dirname) // 현재 폴더의 모든 파일을 조회
.filter(file => { // 숨김 파일, index.js, js 확장자가 아닌 파일 필터링
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => { // 해당 파일의 모델 불러와서 init
const model = require(path.join(__dirname, file));
console.log(file, model.name);
db[model.name] = model;
model.initiate(sequelize);
});
Object.keys(db).forEach(modelName => { // associate 호출
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
module.exports = db;
5. passport 세팅
passport / passport.local / bcrypt 설치
npm i passport passport-local bcrypt
passport 폴더안에 localStrategy.js / index.js 작성
로그인을 위한 미들웨어인 routes / auth.js - routes / middlewares.js 작성
📌
6. .env와 app.js 작성
.env
7. views 파일 작성
views 폴더에
layout.html
main.html
join.html
good.html 작성