20211228 백엔드도입

팡태(❁´◡`❁)·2022년 1월 4일
0

ihongss

목록 보기
4/11

// 벡엔드 만들기
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:pw200@1.234.5.158: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:{}});

0개의 댓글