본문 바로가기

카테고리 없음

실시간 경매 시스템 만들기

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


COOKIE_SECRET
=auction

 

 

 

7. views 파일 작성

views 폴더에

layout.html

main.html 

join.html 

good.html 작성