본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[58일차]20210604 관리자페이지 / sequelize table JS로 가져오기 / sequelize left join

반응형

관리자 페이지 - 보통 url 끝에 adm / admin 을 쳐서 들어감 -> 관리자 로그인 페이지

회원가입할 때 등급을 나눠서 구분 -

게시판 생성관리 / 그룹관리 - 복잡함

 

- 관리자페이지는 기능만 구현되면 되는 주의 ( 안보이니까) 

팝업 리스트까 쭉 있음 - 팝업db fields 

메인페이지에있는 이미지도 db에 담아놓고 (사진 이름으로) -> 내용 숨김, 보임, 등으로 구분

 

게시판 

1. 공지사항

2. 게시판

3. 자유게시판 이 있다면

DB에 3개를 만드는 방법이 있고 (사용자가 많지않은 경우 굳이 3개 따로 만드는건 비효율적) 

board 라는 테이블에 세가지 내용을 다 담기 

field값 하나 추가해서 구분하도록 (ex) url) 공지사항 : notice / 게시판 : board / 자유게시판 : free-board 

 

- board 라는 테이블에서 특정 url field 를 찾아서 쓰면 됨 

=> 하나의 테이블만 만들어도 가능 ! 작업의 편의성 

 

 

 

사이트만든다는 것 : 

코드를 하나도 모르는 사람들이 관리하는 게 많음 !

자주 변경하는 사항이 있으면 db로 만들어서 뿌리는 경우가 많음 

사이트를 사용하는 사람들의 입장에서 개발 

 

교육과정 

 

교육과정 안내를 눌렀을 때 - 이미지 .jpg 하나로 퉁치는 것보다

해당 내용의 db를 불러와서 뿌리는 것이 좋다. ex) 해당 교육 수강 후기 등 

 

 

 

현재 jquery가 죽은 이유 : expolorer 브라우저 호환성 JS 코드가 브라우저마다 되는게 있고 안되는게 있음

jquery쓰면 브라우저 생각안해도 로직만 생각하면 되었음 (크로스 브라우저) 

이제는 브라우저가 다 호환되서 굳이 쓰지않아도 됨 

 

 

adminLTE - bootstrip 으로 만들어져있음 - 관리자페이지에 쓰면됨 

기능이 구현되어 있음 - 사용하면 백단위만 신경쓰면됨 

 

 

 


 

 

 

 

Sequelize 

 

새 폴더 만들어서 3000port  기본 구문 작성 

server.js

$npm init 

$npm i express

 

sequelize 다운 / 세팅 

$npm i sequelize mysql2 sequelize-cli 

$npx sequelize init

 

sequelize - > 클래스 사용 패키지 

mysql2-> 실제적으로 연결하는 역할 / db 접속을 위한 

sequelize-cli - > npx 사용하기 위한 패키지 

npx sequelize init  <- sequelize-cli / 폴더를 3개 생성시키는 패키지 

 

폴더 3개 생성된다

config - db접속정보

models  - 우리가 만든 db 를 객체로 하나로 담기 위해 

 

 

 

config -> 내걸로 수정

models-index.js 필요한 부분만 남기기

'use strict';

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

 

 

 연결 잘 되었는지 확인하기 

server.js 

const express=require('express');
const app = express();
const {sequelize} = require('./models');


sequelize.sync({force:false,})
.then( ()=>{
    console.log('접속 완료')
}).catch( ()=>{
    console.log('접속 실패')
})

app.get('/',(req,res)=>{
    res.send('hello world');
})

app.listen(3000,()=>{
    console.log('server start port : 3000')
})

 

-> DBㅇㅔ 연결이 잘 되었다

 

 

 

 

 

 

sequelize-auto 

db 데이터베이스에 있는 테이블 구조를 가져와서 그대로 모델.js 를 만들어 준다. 

현재 class 라는 db에 있는 테이블 3개를 모델로 만들기 

 

 

 

$npm i sequelize-auto

-> node_modules -> sequelize-auto 에 담김 

이건 콘솔 명령어 

 

 

터미널 명령어 실행 

$sequelize-auto -o -d -h -u -p -x -e

-o "경로" - 경로만 string값  // ./models -> models 안에 넣겠다 

-d 데이터베이스

-h url -> localhost

-u root

-p port

-x password

-e mysql

 

$sequelize-auto -o "./models" -d class -h localhost -u root -p 3306 -x root -e mysql 

"./models" 만 String,,

port 3306 - default값 

에러 -> sequelize auto를 찾을 수 없다는 오류 

 

$npm install -g sequelize-auto 설치 

 

다시 위의 명령어에서 

$npx sequelize-auto -o "./models" -d class -h localhost -u root -p 3306 -x [비번] -e mysql 

npx를 추가해서 쓰고 다시 실행 

class db에 있는 tables 가져와서 모델로 만들어쥼

 

 

 

 

init-models.js -> 파일 중요! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

index.js

5가지 코드 추가 

'use strict';

const Sequelize = require('sequelize');
const initModels=require('./init-models'); //추가
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

let models = initModels(sequelize) //추가 22 , 접속정보를 받은 models 
console.log(models);

db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.curriculum = models.curriculum;  // 추가33
db.skill_item = models.skill_item;  // 추가 44
db.skill=models.skill;            //추가 55

module.exports = db;

 

cnosole.log(models) 

{
  curriculum: curriculum,
  skill: skill,
  skill_item: skill_item,
  test: test
}

 

 

 

가져온것 사용해보기 

 

server.js

const {curriculum,skill_item,skill} = require('./models') //추가 1 


app.get('/', async (req,res)=>{
    let result = await curriculum.findAll();
    console.log(result)
    res.json({result});
})

await skill.findAll() 안되는 이유 - skill table에 id값 없음

findAll() 은 기본적으로 default값 -  id값으로 찾음 / 없는 필드를 조회하니깐 안나옴

 

 

init-models 

function initModels(sequelize) {
  var curriculum = _curriculum(sequelize, DataTypes);
  var skill = _skill(sequelize, DataTypes);
  var skill_item = _skill_item(sequelize, DataTypes);
  var test = _test(sequelize, DataTypes);

  skill.removeAttribute('id');

  return {
    curriculum,
    skill,
    skill_item,
    test,
  };
}

id 지워주기

skill 사용할 때 'id'라는 속성값을 날려버리겠다 ~  

 

server.js

app.get('/', async (req,res)=>{
    let result = await skill.findAll();
    console.log(result)
    res.json({result});
})

위에 skill.removeAttribud('id')를 쓰면 나옴

 

 

 

 

sequelize leftJoin 해보기 

 

app.get('/', async (req,res)=>{
    let result = await skill.findAll({
        include:{model:skill_item,as:"item"}
        
    });
    console.log(result)
    res.json({result});
})

-

app.get('/', async (req,res)=>{
    let result = await skill.findAll({
        include:{model:skill_item,as:"item"},
        where:{curr_id:5}
        
    });
    console.log(result)
    res.json({result});
})
반응형