반응형
프로젝트 구조
사용 모듈
- express
- npm i express
- axios
- npm i axios
- cors
- npm i cors
- mysql2
- npm i mysql2
- sequelize, sequelize-cli
- 설치 방법 : https://chb2005.tistory.com/33
구현 코드 설명
app.js
var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors({ // cors설정을 해줘야 front서버와 통신 가능
origin: 'http://127.0.0.1:8080',
credentials:true,
}));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
var content = require('./routes/content');
app.use('/content', content);
app.listen(52273, function() {
console.log('Server Running at http://127.0.0.1:52273');
});
routes/content.js ( 페이지 라우팅을 하나밖에 안해서 사실상 거의 모든 내용 )
var router = require('express').Router();
var mysql = require('mysql2');
var db = require('.././models');
db.sequelize.sync();
router.post('/write', function(req, res){ // 글 작성
db.content.create({ // 게시판번호와 게시글정보를 req.body로 받아와 db에 삽입
boardnum: req.body.boardnum,
writer: req.body.writer,
title: req.body.title,
text: req.body.text,
}).then(function(){
return res.status(200).json({
message: '글 작성 완료!',
})
}).catch(function(err){
console.log(err);
return res.status(404).json({message: '에러뜸'});
})
});
router.post('/boardlist', function(req, res){ // 게시글 불러오기
db.content.findAll({
where: {
boardnum: req.body.boardnum // 게시판별로 DB가 따로있는게 아니여서 게시판 번호 필요
},
offset: 0 + (req.body.page - 1) * 10,
// offset 설정을 통해 페이지에 맞는 글 찾을 수 있음
// 1page이면 offset 0을 통해 처음 10개 가져옴
limit: 10, // 글 10개만 가져오기
order: [['id', 'ASC']], // id기준으로 오름차순 정렬
raw: true, // raw: true 설정을 해줘야 DB에서 field 정보만 가져옴
}).then(result => {
return res.status(200).json(result);
}).catch(err => {
console.log(err);
return res.status(404).json({message: '에러뜸'});
})
});
router.post('/boardlistcnt', function(req, res){ // 해당 게시판의 게시글 개수 가져오기
db.content.findAndCountAll({
// findAndCoutAll을 통해 조건에 맞는 내용들과 개수를 가져옴
// 이 때 결과는 result.rows, 갯수는 result.count로 받아옴
where: {
boardnum: req.body.boardnum
},
raw: true,
}).then(result => {
return res.status(200).json(result.count);
}).catch(err => {
console.log(err);
return res.status(404).json({message: '에러뜸'});
})
});
router.post('/content', function(req, res){ // 게시글 보기
db.content.findOne({ // id에 맞는 게시글 정보 하나만 불러오면 됨
where: {
id: req.body.id
}, raw:true,
}).then(result => {
return res.status(200).json(result);
}).catch(err => {
console.log(err);
return res.status(404).json({message: '에러뜸'});
})
});
router.post('/delete', function(req, res){ // 게시글 삭제
db.content.destroy({ // destroy를 통해 DB에서 조건에 맞는 정보 삭제
where: {
id: req.body.id
},
}).then(function(){
return res.status(200).json({
message: '글 삭제 완료!'
});
}).catch(err =>{
console.log(err);
return res.status(404).json({message: '에러뜸'});
})
});
router.post('/edit', function(req, res){ // 게시글 수정
db.content.update({text: req.body.text}, { // update를 통해 조건에 맞는 게시글의 text filed를 수정
where: {
id: req.body.id
},
}).then(function(){
return res.status(200).json({
message: '글 수정 완료!'
});
}).catch(err =>{
console.log(err);
return res.status(404).json({message: '에러뜸'});
})
});
module.exports = router;
models/content.js
module.exports = (sequelize, DataTypes) => {
return sequelize.define('content', {
writer: { // 작성자
type: DataTypes.STRING(30),
allowNull: false,
},
title: { // 제목
type: DataTypes.STRING(30),
allowNull: false,
},
text: { // 글 내용
type: DataTypes.STRING(3000),
},
boardnum: { // 게시판 번호
type: DataTypes.INTEGER,
allowNull: false,
},
},{
charset: 'utf8',
collate: 'utf8_general_ci', // 이걸 해줌으로써 DB에 한글사용 가능
});
}
models/index.js
db.content = require('./content')(sequelize, Sequelize);
- 'npx sequelize init'을 하면 자동으로 폴더와 파일들이 생성되는데 이때, models/index.js도 생성됨
- content라는 table 사용을 위해 맨 아래 'module.exports = db; ' 윗 줄에 위의 코드 삽입
config/config.json
"development": {
"username": "root",
"password": "root1234",
"database": "board",
"host": "127.0.0.1",
"dialect": "mysql",
"timezone": "+09:00"
},
- 이 부분에서 'username', 'password', 'database'(DB명)은 자기 설정에 맞게 수정해주고,
- 맨 밑에 "timezone" : "+09:00" 코드를 추가해줘야됨
- sequelize는 기본적으로 utc 시간 기준으로 설정되기 때문에 한국시간에 맞추기 위해서는 +9를 해줘야됨
- 시간을 안 쓸때는 필요없지만, 이 프로젝트에서는 updatedAt, createdAt을 사용해서 필요
반응형
'Node.js' 카테고리의 다른 글
[Node.js + Vue.js] 게시판 만들기 5. 이미지 업로드 기능 추가 (0) | 2021.12.13 |
---|---|
[Node.js + Vue.js] 게시판 만들기 4. 검색 기능 추가 (0) | 2021.12.11 |
[Node.js + Vue.js] 게시판 만들기 2. Vue.js를 사용한 Front Server 구현 (0) | 2021.12.11 |
[Node.js + Vue.js] 게시판 만들기 1. 설계 & 결과 (4) | 2021.12.10 |
[Node.js] Sequelize 사용하기 (0) | 2021.12.08 |