20211228 백엔드도입
// 벡엔드 만들기
CMD> npm i express-generator -g -g 프로그램 설치
CMD> express --version
현재버전 4.16.1
CMD> express -e exp_20211227
CMD> cd exp_20211227
CMD> npm install
CMD> npm i nodemon -g -g 프로그램 설치
CMD> nodemon --inspect ./bin/www (소스코드 변경 적용됨)
크롬에서 localhost:3000
//시퀀스(오라클) : 숫자를 자동으로 부여.
//ai(mysql) : 숫자를 자동으로 부여.
// 컬렉션 seqboard을 생성
db.seqboard.insert({
_id : 'SEQ_BOARD_NO',
seq : 1
});
// 파일명 : routes/board.js
var express = require('express');
var router = express.Router();
// npm i mongodb --save
const db = require('mongodb').MongoClient;
// mongodb://아이디:암호@서버주소:포트번호/DB명
const dbUrl = 'mongodb://id200:[email protected]:37017/db200';
//get(조회), post(추가), put(수정), delete(삭제)
// 글쓰기 : http://localhost:3000/board/insert
// req : request : 들어오는 값의 정보 => POST -> req.body
// res : response : 전달하는 값
router.post('/insert', async function(req, res, next) {
try {
console.log("--------------------------");
console.log(req.body);
//{ title: '제목', writer: '홍길동', content: 'aaa' }
console.log("--------------------------");
// 접속(1) -> DB선택 -> 컬렉션 -> CRUD(추가, 수정, 삭제, 조회)
// 1회만 : dbConn DB연결
const dbConn = await db.connect(dbUrl);
const coll = dbConn.db("db200").collection("seqboard");
// 글번호 자동으로 {가져오기}, {수정하기}
// _id가 SEQ_BOARD_NO인것을 가지고 오고,
// seq값을 기존값에 1증가시킴
const result = await coll.findOneAndUpdate(
{ _id:'SEQ_BOARD_NO' }, { $inc : { seq : 1} }
);
//글번호
console.log(result.value.seq);
const coll1 = dbConn.db("db200").collection("board");
const result1 = await coll1.insertOne({
_id : Number(result.value.seq), // 글번호(PK)
title : req.body.title, // 전송되는항목 글제목
content : req.body.content, //전송되는항목 글내용
writer : req.body.writer, // 전송되는항목 작성자
hit : 1, // 조회수
regdate : new Date() // 현재시간
});
//{ acknowledged: true, insertedId: 10 }
console.log(result1);
if( result1.insertedId > 0 ){
return res.send({status:200});
}
return send({status:-1});
}
catch(err){
console.error(err);
return res.send({status:-1});
}
});
// 게시물 상세내용 : http://localhost:3000/board/selectone
// req 전송되는 값 : GET -> req.query
router.get('/selectone', async function(req, res, next) {
try{
const no = Number(req.query.no); //글번호
console.log(no);
// DB접속 -> DB선택 -> 컬렉션(board) -> 전체 가져오기
const dbConn = await db.connect(dbUrl);
const coll = dbConn.db("db200").collection("board");
const result = await coll.findOne({_id : no});
console.log(result);
return res.send({status:200, result:result});
}
catch(err){
console.error(err);
return res.send({status:-1, result : err});
}
});
// 게시물 목록 : http://localhost:3000/board/select
router.get('/select', async function(req, res, next) {
try {
// 페이지 정보가 전달
const page = Number(req.query.page);
// 1 -> skip(0) -> skip( (page-1) * 10 )
// 2 -> skip(10)
// 3 -> skip(20)
// DB접속 -> DB선택 -> 컬렉션(board) -> 전체 가져오기
const dbConn = await db.connect(dbUrl);
const coll = dbConn.db("db200").collection("board");
// 여러개 가져오기 find() ..... toArray() 변환
const result = await coll.find({ })
.sort({_id:-1}) // 1 오름차순, -1 내림차순
.skip((page-1) * 10 ) // 생략할 개수
.limit(10) // 10개 까지만
.toArray();
console.log(result);
// 페이지네이션에서 사용할 전체 개시물 수
const total = await coll.countDocuments({});
return res.send({status:200, result:result, total:total});
}
catch(err){
console.error(err);
return res.send({status:-1, result : err});
}
});
// 조회수 증가 : http://localhost:3000/board/updatehit
router.put('/updatehit', async function(req, res, next) {
try {
const no = Number(req.query.no); //글번호
// DB접속 -> DB선택 -> 컬렉션(board) -> 조회수변경
const dbConn = await db.connect(dbUrl);
const coll = dbConn.db("db200").collection("board");
// 변경하기 updateOne({조건},{변경할내용})
const result = await coll.updateOne(
{ _id : no }, //조건
{ $inc : {hit :1} } //실제변경될 내용
);
console.log(result);
if(result.modifiedCount === 1){
return res.send({status:200});
}
return res.send({status:-1});
}
catch(err){
console.error(err);
return res.send({status:-1, result : err});
}
});
// 게시물 삭제
// 게시물 수정
// 이전글
// 다음글
module.exports = router;
======================================
// 파일명 : Menu1.vue
<div>
<h3>Menu1.vue</h3>
<el-button type="primary" @click="handleWrite">글쓰기</el-button>
<el-table :data="items" style="width: 100%;cursor:pointer;"
size="mini" @row-click="rowClick">
<el-table-column prop="_id" label="글번호" width="80" />
<el-table-column prop="title" label="제목" width="180" />
<el-table-column prop="writer" label="작성자" width="120" />
<el-table-column prop="hit" label="조회수" width="80" />
<el-table-column prop="regdate" label="날짜" />
</el-table>
<el-pagination layout="prev, pager, next" :total="total" @current-change="currentChange"></el-pagination>
</div>
//조회 : await this.axios.get(url, {headers:headers});
//추가 : await this.axios.post(url, body, {headers:headers});
//수정 : await this.axios.put(url, body, {headers:headers});
//삭제 : await this.axios.delete(url, {headers:headers, data:{}});
Author And Source
이 문제에 관하여(20211228 백엔드도입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gegus1220/20211228-백엔드도입저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)