[06.16] Sequelize
https://www.npmjs.com/package/sequelize
sequelize
Multi dialect ORM for Node.JS
www.npmjs.com
SQL을 몰라도 자바스크립트 구문을 알아서 SQL로 바꿔주는 라이브러리
https://www.npmjs.com/package/sequelize-cli
sequelize-cli
The Sequelize CLI
www.npmjs.com
Config 파일들을 알아서 만들어준다.
- npm init -y
- npm i sequelize mysql2 sequelize-cli
0. config.json 파일 수정
{
"development": {
"username": "root",
"password": "<PASSWORD>",
"database": "sequelize_db",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+09:00"
},
"test": {
"username": "root",
"password": "<PASSWORD>",
"database": "sequelize_db",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+09:00"
},
"production": {
"username": "root",
"password": "<PASSWORD>",
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
},
"define": {
"charset": "utf8",
"collate": "utf8_bin",
"timestamps": true
}
}
1. DB와 연결하기
const express = require("express");
const app = express();
const { Sequelize } = require("sequelize");
const port = 3000;
const sequelize = new Sequelize("mysql", "<ID>", "<PASSWORD>", {
host: "<HOST>",
dialect: "mysql",
});
app.get("/", (req, res) => {
res.send("hello express");
});
app.get("/connectdb", (req, res) => {
connect();
res.send("db connection test.....");
});
async function connect() {
try {
await sequelize.authenticate();
console.log("connected");
} catch (err) {
console.log(err);
}
}
app.listen(port, () => {
console.log("server is on");
});
2. Sequelize-Auto를 사용해서 DB접속 및 테이블 매핑
const SequelizeAuto = require("sequelize-auto");
const auto = new SequelizeAuto("nodejs", "root", "<PASSWORD>", {
host: "localhost",
port: "3306",
dialect: "mysql",
});
auto.run((err) => {
if (err) throw err;
console.log("complete!");
});
3. DB내용 불러오기
const initModels = require("./models/init-models");
const Sequelize = require("sequelize");
const users = require("./models/users");
const sequelize = new Sequelize("nodejs", "root", "1q2w3e4r!", {
host: "localhost",
dialect: "mysql",
});
const models = initModels(sequelize);
//CALLBACK으로 불러오기
// models.users.findAll().then((results) => {
// console.log(results);
// });
//async await을 사용해서 불러오기
async function findAllFromUsers() {
const results = await models.users.findAll();
console.log(results);
}
findAllFromUsers();
SELECT `id`, `name`, `age`, `married`, `comment`, `created_at` FROM `users` AS `users`;
이 query를 실행한 결과와 동일하다.
4. 중복되는 부분 module로 빼기
mySequelize.js
const initModels = require("./models/init-models");
const Sequelize = require("sequelize");
const users = require("./models/users");
const sequelize = new Sequelize("nodejs", "root", "1q2w3e4r!", {
host: "localhost",
dialect: "mysql",
});
const models = initModels(sequelize);
module.exports = {
models,
};
findall.js
const { models } = require("./mySequelize");
//CALLBACK으로 불러오기
// models.users.findAll().then((results) => {
// console.log(results);
// });
//async await을 사용해서 불러오기
async function findAllFromUsers() {
const results = await models.users.findAll();
console.log(results);
}
findAllFromUsers();
위의 것과 동일한 결과가 나온다.
※ age가 30이상이고 married한 객체의 이름만 출력
const { Op, models } = require("./mySequelize");
//SELECT `name` FROM `users` AS `users` WHERE `users`.`age` >= 30 AND `users`.`married` = 1;
async function FindAllFromProducts() {
const users = await models.users.findAll({
//name column만 출력한다.
attributes: ["name"],
where: {
age: {
//age가 30보다 크거나 같은가?
[Op.gte]: 30,
},
married: {
//married값이 1과 동일한가?
[Op.eq]: 1,
},
},
});
const json = JSON.stringify(users);
console.log(json);
}
FindAllFromProducts();
그 외의 쿼리들은 아래에서 확인할 수 있다.
https://sequelize.org/master/manual/model-querying-basics.html
Manual | Sequelize
Model Querying - Basics Sequelize provides various methods to assist querying your database for data. Important notice: to perform production-ready queries with Sequelize, make sure you have read the Transactions guide as well. Transactions are important t
sequelize.org
============================================================================
app.js
const express = require("express");
const app = express();
const port = 3000;
const { Op, models } = require("./sequelize_common");
async function FindUsers() {
const user = await models.users.findAll();
const json = JSON.stringify(user);
return json;
}
async function FindUser(value) {
const user = await models.users.findAll({
where: {
id: {
[Op.eq]: value,
},
},
});
const json = JSON.stringify(user);
return json;
}
app.get("/api/users", async (req, res) => {
let result;
if (req.query === undefined) {
result = await FindUsers();
} else {
const id = req.query.id;
result = await FindUser(id);
}
res.send(result);
});
app.listen(port, () => {
console.log("서버 동작중");
});
sequelize_common.js
const { Op, Sequelize } = require("sequelize");
const initModels = require("./models/init-models");
const users = require("./models/users");
const sequelize = new Sequelize("nodejs", "root", "1q2w3e4r!", {
host: "localhost",
dialect: "mysql",
});
const models = initModels(sequelize);
module.exports = {
models,
Op,
};