おもちゃプロジェクト

개인 블로그 만들기(3)

차가리 2022. 3. 17. 14:53
728x90

express + quasar axios 통신

이번에 쓸 글은 back인 express와 front인 quasar간의 통신이다.

전글에 작성한 내용과 달리 proxy설정이 살짝 변경되었다.

/frontend/quasar.conf.js의 devServer 부분

 devServer: {
      server: {
        type: 'http'
      },
      port: 8080,
      open: true, // opens browser window automatically
      proxy:{
        '/':'http://localhost:3000',
        changeOrigin: true,
        pathRewrite:{
          '^/':''
        }
      },
      historyApiFallback: true
    },

/api를 없애고 '/'을 넣었다.
historyApiFallback은 나중에 추가로 install 해야될 history-api-fallback에서 언급하겠다.

프록시 설정을 했으면 이제 '/'를 넣으면 back인 express의 url이 붙는다.

front

Board.vue로 이동

<template>
<div>
  <div
    v-for="(bo,i) in board"
    :key="i"
  >
    <h1>{{bo.title}}</h1>
    <h1>{{bo.writer}}</h1>
  </div>
</div>

</template>
<script>
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'Board',
  data: ()=>({
    board: []
  }),
  created() {
       this.$axios.get('/board').then((res)=>{
         this.board = res.data.board
        }).catch((err)=>{
          console.log(err)
        })
  },
})
</script>
<style></style>

axios에 관해서는 전 글에 기재되어 있다.

(backend) connect-history-api-fallback

Router 모드를 history로 할 것이기 때문에 install을 해준다. hash를 사용하고 싶으면 이 부분은 넘어가도 좋다.

npm install --save connect-history-api-fallback

(backend) app.js 이동

(생략)
var history = require('connect-history-api-fallback');
(생략)
app.use(history());
// history는 선언하는 위치를 높게 해놓는게 좋다.

Vue 는 SPA로 동작하기 때문에 외부에서의 새로운 요청에는 경로를 찾아갈 수 없다. router로만 이동이 가능하기 때문에
새로고침, 주소창에다가 동일한 url을 입력한 경우에는 404에러가 난다. 나의 경우에는 화면은 나오지 않고 express에서
가져온 데이터가 흰 화면에 그대로 들어간 것을 확인 할 수 있었다. express 에서 res.json()으로 응답하는 결과만 주고
화면은 반응하지 않았으므로 당연한 결과이다.

(backend) routes/board.js

(생략)
router.get('/',(req,res)=>{
       Board.findAll()
            .then(boards =>{
                if(!boards.length) return res.status(500).send('데이터 없음')

                return res.status(200).json({board:boards})
            })
            .catch(err =>
                res.status(500).send(err)
            );
})
(생략)

저기 res 부분에는 return을 해주는게 좋다. 아니면 exception이 난다.
res.send가 같은 위치에 여러 개 있으면 동시에 응답이 가므로 exception이 난다고 한다.
그래서 return으로 하나의 res.send만 하고 끝나게끔 해줘야한다.

실행

cd frontend
quasar dev

cd backend
npm start

localhost:8080/board로 요청을 보냈을 때 나오는 화면이다.

번외

MongoDB userCreate 및 Collection 생성 Document 입력

Collection : RDB의 Table 이라고 생각
Document : RDB의 row라고 생각

먼저 MongoDB cli에 들어가서 해당 명령어를 순서대로 쳐준다.

처음 MongoDB를 생성한 경우에는 이렇게 하면 된다.

use admin

db.createUser({user:"<아이디>",pwd:"<password>",roles:[{"role":"dbAdminAnyDatabase","db":"admin"}]})
# dbAdminAnyDatabase 는 쓰기,읽기,db생성 및 삭제가 가능하게 하는 권한

#계정확인
db.auth("<아이디>","비밀번호")

> 1 # return 값이 1이 나오면 성공.

#생성할 DB
use <생성할 DB명>

#이 DB에 대한 계정 생성
db.createUser({user:"<id>",pwd:"pwd",roles:[{"role":"readWrite","db":"생성한 db명"}]})

#이렇게 되면 생성된게 아니라 값을 넣어줘야지 생성이 완료된다.
#나는 한번에 만드는 방법을 몰라서 이 방법을 쓴다.

db.<아무 collection 명>.insert({name:"asdf",d:"sdaf"})

# 이렇게 하면 완성 된다.

나는 docker를 이용해서 MongoDB를 설치했다.

mongod.conf.orig

conf 파일에

#security:

이렇게  되 있는 경우가 있다.

확인하는 방법은 docker의 mongodb cli를 실행 한 후에 /etc 경로에 mongod.conf.orig라는 게 있다.

그것을 vim으로 수정하면 된다.

vim이 없는 경우에는 설치를 하면 된다.

apt-get update

apt-get install vim

#설치 완료 후 /etc에서

vi mongod.conf.orig

security : 
    authorization: 'enable'

#또는 주석 처리 되 있다면 주석을 지운 후 위와 동일하게 설정해주면 된다.

이렇게 설정까지 완료되었으면 접속이 가능해진다.

728x90