기본적인 웹사이트를 생성할 client server 구성
const express = require('express')
const exphbs = require('express-handlebars')
const bodyParser = require('body-parser')
const path = require('path')
const app = express()
const PORT = process.env.PORT || 5000
app.get('/', (req, res)=> {
res.send('INDEX')
})
app.listen(PORT, console.log(`SERVER ON ${PORT}`))
postgreSQL database와 연결
config 폴더를 생성해서 별도의 database.js 파일 구성
const {Sequelize} = require('sequelize')
const db = new Sequelize('DATABASE_NAME', 'owner', 'password', {
host: 'localhost',
dialect: 'postgres'
});
db.authenticate()
.then(()=>console.log('Database connected successfully'))
.catch(error => console.error('ERROR FOUNDL ', error))
생성한 database에서 table 정보를 가져온다(객체화를 통한 ORM 작업).
models 폴더에서 Models.js 파일을 구성하여 별도의 경로 생성
→ 이때 파일의 이름은 통상적으로 첫이름을 대문자로 사용한다.
반드시 자신이 postgreSQL db 내 생성한 table 제목과 일치하도록 구성한다.
const Sequelize = require('sequelize')
const db = require('../config/database')
const tables = db.define('hyokyun_1', {
title: {
type: Sequelize.STRING
},
technologies: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
budget: {
type: Sequelize.STRING
},
contact_email: {
type: Sequelize.STRING
}
})
module.exports = tables
위에서 매핑한 table 정보를 그대로 활용할 수 있게 된다.
express middleWare를 활용하여 별도의 routing 경로 생성
app.use('/tables', require('./routes/tables'))
※ middleWare로 인해, 해당 경로 요청이 발생하면 callback으로 정의한 logic 작동한다.
routing 파일에서 table 정보 가져오기
const express = require('express')
const router = express.Router()
const db = require('../config/database')
const Model = require('../models/Model')
router.get('/', (req, res) => {
//res.send('THIS IS entities')
Model.findAll()
.then(list=>{
console.log(list)
res.sendStatus(200)
})
.catch(err => console.error('ERROR FOUND : ', err))
})
module.exports = router
express router를 통해 요청을 전달받는다.
log를 통해 보여지는 database의 table 정보 확인
※ table에 아직 정보가 채워지지 않은 상태이므로, 해당 정보에 연결된 상태만 출력되고 findAll()에 대한 정보는 출력되지 않는다(공배열 상태로 출력).
화면에 res.sendStatus(200)이 정상 출력되는지 확인("OK")
sequelize 공식문서
https://sequelize.org/master/manual/getting-started.html
express-handlebars
https://velog.io/@parkoon/%EC%8B%A4%EB%AC%B4%EC%97%90%EC%84%9C-Handlebars-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-feat-express
npm i options
https://c17an.netlify.app/blog/node.js/npm-install-%EC%A0%95%EB%A6%AC/article/
postgre schema error
https://javaoop.tistory.com/71