mysql 에 기생성된 database, tables를 sequelize 사용해서 js로 가져오기
1. 기본 server.js 세팅
$npm init
$npm i express
server.js
const express = require('express');
const app = express();
app.get('/',(res,req)=>{
res.send('d');
})
app.listen(3000,()=>{
console.log('server start port : 3000')
})
2. sequelize 다운/ 세팅 / 코드작성 / db연결 확인
$npm i sequelize mysql2 sequelize-cli
$npx sequelize init
sequelize - > 클래스 사용 패키지
mysql2 -> db 접속역할
sequelize-cli -> npx 사용위한 패키지
npx sequelize init -> sequelize 폴더 3개 생성시킴
* 생성되는 폴더 config - db접속정보 / models - 우리가 만든 db를 객체로 하나로 담기위해
config -> 나의 정보로 수정 (database name: class / password)
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;
sequelize 가져오는 코드 추가 / 연결 잘되었는지 확인하기
server.js
const express = require('express');
const app = express();
const {sequelize} = require('./models'); // index.js 에서 exports하는 객체db의 sequelize만 가져옴
sequelize.sync({force:false,})
.then(()=>{
console.log('접속 완료');
}).catch(()=>{
console.log('접속 실패');
})
app.get('/',(res,req)=>{
res.send('d');
})
app.listen(3000,()=>{
console.log('server start port : 3000')
})
3. sequelize-auto - db 에 있는 tables 가져와서 그대로 모델.js를 만들어 주기
$npm i sequelize-auto (콘솔 명령어이다.)
-o "경로" <- models을 만들 곳 지정 / 요기만 only STRING
-d database
-h url( = localhost)
-u root
-p port
-x password
-e DBMS name(= mysql)
터미널 명령어 실행
$sequelize-auto -o"./models" -d class -h localhost -u root -p 3306 -x root -e mysql
오류 해결 ↓↓
$npm install -g sequelize-auto
다시 명령어 npx 붙여서 실행
$npx sequelize-auto -o "./models" -d class -h localhost -u root -p 3306 -x [비번] -e mysql
이번엔 mysql2 ERROR :Please install mysql2 package manually
오류 해결 ↓↓
$npm i -g mysql2
다시 명령어 실행
$npx sequelize-auto -o "./models" -d class -h localhost -u root -p 3306 -x [비번] -e mysql
done!!
4. class DB에 있는 tables 가져와서 모델로 만들어주기
index.js - 코드 5줄 추가
'use strict';
const Sequelize = require('sequelize');
const initModels = require('./init-models'); //추가 1
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) //추가 2 (init-models의 function 한 것)
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.curriculum = models.curriculum; // 추가 3
db.skill_item = models.skill_item; // 추가 4
db.skill = models.skill; // 추가 5
module.exports = db;
5. 가져온 것 사용해보기
server.js
const express = require('express');
const app = express();
const {sequelize} = require('./models');
const {curriculum, skill_item, skill} = require('./models'); // 추가요
sequelize.sync({force:false,})
.then(()=>{
console.log('접속 완료');
}).catch(()=>{
console.log('접속 실패');
})
app.get('/',async (res,req)=>{
let result = await curriculum.findAll(); // == select * from curriculum
console.log(result);
res.json({result});
})
app.listen(3000,()=>{
console.log('server start port : 3000')
})
curriculum 말고 skill을 사용해보면 오류가 난다.
해결법 ↓↓
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});
})
sequelize left join
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({ // 주 테이블은 skill
include:{model:skill_item,as:"item"}, //skill_item table과 조인하겠다. as item
where:{curr_id:5} // curr_id가 5인 곳에서
});
console.log(result)
res.json({result});
})
'블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기' 카테고리의 다른 글
[64~68일차] 20210613~17 apple clone 팀프로젝트 (0) | 2021.06.14 |
---|---|
[59~63일차]20210607-11 팀프로젝트 1주차 (0) | 2021.06.07 |
[57일차 복습]mysql foreign key 외래키 설정/ left join / union / 특정 field 값 가져오기 (0) | 2021.06.06 |
[58일차]20210604 관리자페이지 / sequelize table JS로 가져오기 / sequelize left join (0) | 2021.06.06 |
[57일차]20210603 MariaDB mysql table3개 만들어서 연결하기 / ㅣleft JOIN (0) | 2021.06.03 |