Express+PostgreSQL+Sequelize를 Docker로 구축해 본다[후편]
13036 단어 ExpressPostgreSQLsequelizeNode.js도커
지난번
그렇습니다.
③DB 주변 설정
컨테이너의 Express 환경에서 DB 설정이 이루어진 파일이 있습니다.
여기서 docker-compose.yml에서 설정한 DB에 대한 액세스 정보가 명시되어 있습니다.
db_client.jsmodule.exports = {
pg_client: function () {
const { Client } = require('pg')
const client = new Client({
user: process.env.DB_USER,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME
})
return client
},
};
일단 현재 상황에서도 DB에 액세스 자체는 할 수 있다고 생각합니다.
routes 내의 index.js를 살펴 보자!
'URL/'에 GET로 액세스했을 때 어떤 행동을 하는지를 씁니다.
방금 sb_client.js를 읽어 DB와의 연결을 가능하게합니다.
routes/index.jsrouter.get('/', function (req, res, next) {
const client = require("../db_client").pg_client()
client.connect()
.then(() => console.log("success!!"))
.then(() => client.query("select * from chat order by timestamp desc"))
.then(function (results) {
console.table(results.rows)
res.render('index', { result: results.rows })
})
그러나 여섯 번째 줄을 보면 DB 처리를 SQL 문으로 호출합니다.
이것이라도 SQL의 공부로서는 좋습니다만, 복수의 테이블을 준비해, 그것들을 연결하는 릴레이션등의 처리를 실시할 때는 보다 편한 ORM을 활용합니다.
④ORM 활용
객체 관계 매핑(영문: Object-relational mapping, O/RM, ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 사이의 비호환 데이터를 변환하는 프로그래밍 기법이다. wikipedia 참조
Node.js를 사용할 때 ORM으로 Sequelize를 활용합니다.
Terminal# npm install -g sequelize sequelize-cli
# sequelize-cli init
이 시점에서 작업 디렉토리에 config.json 및 model 디렉토리가 생성됩니다.
config
./config/config.json{
"development": {
"username": "postgres",
"password": null,
"database": "mydatabase",
"host": "database",
"dialect": "postgres",
"operatorsAliases": false
},
config.json에서 host에 127.0.0.1을 지정하는 것이 일반적이라고 합니다만, Docker의 경우라면 migration 시점에서 DB에 액세스할 수 없어, 라고 에러를 토하는 일이 있습니다. 그 때문에 docker-compose.yml로 설정한 DB_HOST(=database)를 그대로 활용합니다.
우선 작성할 테이블과 컬럼 정보를 결정하여 DB를 작성합니다!
Terminal# sequelize-cli model:generate --name user --attributes firstName:string,lastName:string,email:string
# sequelize-cli db:migrate
migration
migration이 완료되면 DB의 열 정보가 migration 폴더에 표시됩니다.
./migration/date-create-user.jsmodule.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
};
모델
migration이 완료되면 Model에 입력한 DB의 열 정보가 표시됩니다.
이것을 확인할 수 있으면 일단 완료입니다.
./model/user.jsuser.init({
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {
sequelize,
modelName: 'user',
});
model/index.js나 이번에 작성한 model/user.js는 관계 설정이나 어소시에이션 등으로 편집합니다만, 이 시점에서는 노터치입니다.
사용자 등록 → 사용자 표시의 일련의 흐름
쉽게 사용자 등록 앱에서도 만듭니다.
양식에서 사용자: 후지카와 구아를 입력하여 표시했습니다.
#참고 기사
PostgreSQL에 액세스
htps : // m / 유스케 / ms / 448843020c0406363 5
ORM 관련
htps : // 이 m/i zs 왓·있어 ms/31d448c501d24d31c846
ORM 관련
htps : // 코 m / 코케 C rot s / ms / 144949 03 5138fc6d5
Reference
이 문제에 관하여(Express+PostgreSQL+Sequelize를 Docker로 구축해 본다[후편]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rockguitar67/items/0020d734201632077cb5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
컨테이너의 Express 환경에서 DB 설정이 이루어진 파일이 있습니다.
여기서 docker-compose.yml에서 설정한 DB에 대한 액세스 정보가 명시되어 있습니다.
db_client.js
module.exports = {
pg_client: function () {
const { Client } = require('pg')
const client = new Client({
user: process.env.DB_USER,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME
})
return client
},
};
일단 현재 상황에서도 DB에 액세스 자체는 할 수 있다고 생각합니다.
routes 내의 index.js를 살펴 보자!
'URL/'에 GET로 액세스했을 때 어떤 행동을 하는지를 씁니다.
방금 sb_client.js를 읽어 DB와의 연결을 가능하게합니다.
routes/index.js
router.get('/', function (req, res, next) {
const client = require("../db_client").pg_client()
client.connect()
.then(() => console.log("success!!"))
.then(() => client.query("select * from chat order by timestamp desc"))
.then(function (results) {
console.table(results.rows)
res.render('index', { result: results.rows })
})
그러나 여섯 번째 줄을 보면 DB 처리를 SQL 문으로 호출합니다.
이것이라도 SQL의 공부로서는 좋습니다만, 복수의 테이블을 준비해, 그것들을 연결하는 릴레이션등의 처리를 실시할 때는 보다 편한 ORM을 활용합니다.
④ORM 활용
객체 관계 매핑(영문: Object-relational mapping, O/RM, ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 사이의 비호환 데이터를 변환하는 프로그래밍 기법이다. wikipedia 참조
Node.js를 사용할 때 ORM으로 Sequelize를 활용합니다.
Terminal# npm install -g sequelize sequelize-cli
# sequelize-cli init
이 시점에서 작업 디렉토리에 config.json 및 model 디렉토리가 생성됩니다.
config
./config/config.json{
"development": {
"username": "postgres",
"password": null,
"database": "mydatabase",
"host": "database",
"dialect": "postgres",
"operatorsAliases": false
},
config.json에서 host에 127.0.0.1을 지정하는 것이 일반적이라고 합니다만, Docker의 경우라면 migration 시점에서 DB에 액세스할 수 없어, 라고 에러를 토하는 일이 있습니다. 그 때문에 docker-compose.yml로 설정한 DB_HOST(=database)를 그대로 활용합니다.
우선 작성할 테이블과 컬럼 정보를 결정하여 DB를 작성합니다!
Terminal# sequelize-cli model:generate --name user --attributes firstName:string,lastName:string,email:string
# sequelize-cli db:migrate
migration
migration이 완료되면 DB의 열 정보가 migration 폴더에 표시됩니다.
./migration/date-create-user.jsmodule.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
};
모델
migration이 완료되면 Model에 입력한 DB의 열 정보가 표시됩니다.
이것을 확인할 수 있으면 일단 완료입니다.
./model/user.jsuser.init({
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {
sequelize,
modelName: 'user',
});
model/index.js나 이번에 작성한 model/user.js는 관계 설정이나 어소시에이션 등으로 편집합니다만, 이 시점에서는 노터치입니다.
사용자 등록 → 사용자 표시의 일련의 흐름
쉽게 사용자 등록 앱에서도 만듭니다.
양식에서 사용자: 후지카와 구아를 입력하여 표시했습니다.
#참고 기사
PostgreSQL에 액세스
htps : // m / 유스케 / ms / 448843020c0406363 5
ORM 관련
htps : // 이 m/i zs 왓·있어 ms/31d448c501d24d31c846
ORM 관련
htps : // 코 m / 코케 C rot s / ms / 144949 03 5138fc6d5
Reference
이 문제에 관하여(Express+PostgreSQL+Sequelize를 Docker로 구축해 본다[후편]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rockguitar67/items/0020d734201632077cb5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# npm install -g sequelize sequelize-cli
# sequelize-cli init
{
"development": {
"username": "postgres",
"password": null,
"database": "mydatabase",
"host": "database",
"dialect": "postgres",
"operatorsAliases": false
},
# sequelize-cli model:generate --name user --attributes firstName:string,lastName:string,email:string
# sequelize-cli db:migrate
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
};
user.init({
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {
sequelize,
modelName: 'user',
});
쉽게 사용자 등록 앱에서도 만듭니다.
양식에서 사용자: 후지카와 구아를 입력하여 표시했습니다.
#참고 기사
PostgreSQL에 액세스
htps : // m / 유스케 / ms / 448843020c0406363 5
ORM 관련
htps : // 이 m/i zs 왓·있어 ms/31d448c501d24d31c846
ORM 관련
htps : // 코 m / 코케 C rot s / ms / 144949 03 5138fc6d5
Reference
이 문제에 관하여(Express+PostgreSQL+Sequelize를 Docker로 구축해 본다[후편]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rockguitar67/items/0020d734201632077cb5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)