Nuxt.js + axios로 비동기 데이터 통신 핸즈온 바람

13305 단어 nuxtaxiosVue.jsnuxt.js

여기서 말하는 비동기 데이터 통신이란



  • api 서버에서 데이터를 검색하여 페이지에 표시한다고 가정합니다.

  • 전제


  • npm v5.2.0以上가 로컬 또는 개발 환경에 있음

  • 프로젝트 만들기


    create-nuxt-app [プロジェクト名]
    
  • 이런 식으로 선택 (Axios 선택)
  • package.jsonaxios 가 들어 있는지 확인

  • package.json
    
    {
      "name": "async-test",
      "version": "1.0.0",
      "description": "My supreme Nuxt.js project",
      "author": "yosuke0517",
      "private": true,
      "scripts": {
        "dev": "nuxt",
        "build": "nuxt build",
        "start": "nuxt start",
        "generate": "nuxt generate",
        "lint": "eslint --ext .js,.vue --ignore-path .gitignore ."
      },
      "dependencies": {
        "nuxt": "^2.0.0",
        "@nuxtjs/axios": "^5.3.6"
      },
      "devDependencies": {
        "@nuxtjs/eslint-config": "^1.0.1",
        "@nuxtjs/eslint-module": "^1.0.0",
        "babel-eslint": "^10.0.1",
        "eslint": "^6.1.0",
        "eslint-plugin-nuxt": ">=0.4.2"
      }
    }
    
    

    동작 확인 (일단 데포로 OK)





    학습에 사용할 데이터 만들기



    JSONPlaceholder 이라는 웹 서비스를 사용. 실제 실무에서도 데이터를 준비하는 비용을 줄일 수 있다.
  • 이번은 users/의 데이터로 실시한다
  • 다음 URL로 액세스하면 의사 사용자의 데이터를 얻을 수 있습니다




  • 데이터 검색 및 표시


  • index.vue의 불필요한 부분을 삭제하고 방금전의 url로부터 단순히 데이터를 취득해 표시(아래와 같이 되어 있으면 OK로 styl 태그는 삭제)

  • index.vue
    <template>
      <div class="container">
        <div>
          {{ users }}
        </div>
      </div>
    </template>
    
    <script>
    const axios = require('axios')
    const url = 'https://jsonplaceholder.typicode.com/users'
    
    export default {
      asyncData ({ params }) {  //コンポーネントを初期化する前に非同期処理を行えるようにするメソッド
        return axios.get(url) //apiからのデータ取得をリクエスト
          .then((res) => {  //thenはレスポンスを受け取った段階で呼ばれるメソッド(res)にはレスポンスデータが入っている
            return { users: res.data } //res.dataにはjsonオブジェクトが入っている
          })
      }
    }
    </script>
    
    
  • 결과


  • 1인분의 데이터를 꺼내 표시


  • 사고방식
  • 배열이므로 인덱스를 지정하거나 키를 지정하는 것만


  • index.vue
    {{ users[0] }}
    

    토카

    index.vue
    {{ users[0].id }},{{ users[0].name }}
    

    토카
  • 결과


  • v-for에서 여러 데이터를 목록으로 표시합니다.


  • 사고방식
  • v-for 사용


  • index.vue
    <!--{{ users[0].id }},{{ users[0].name }}-->
          <ul>
            <li v-for="user in users" :key="user.id">
              {{ user.id }},{{ user.name }}
            </li>
          </ul>
    
  • 결과


  • 오류 처리



  • 상황
  • 404 오류가 발생했다고 가정합니다.

  • index.vue 내의 url을 존재하지 않는 url로 변경
  • 예) const url = 'https://jsonplaceholder.typicode.com/usersxxx'


  • 사고방식
  • 인수에 error 를 넣고 catchメソッド 로 처리한다


  • index.vue
    export default {
      asyncData({ params, error }) {
        return axios.get(url) 
          .then((res) => {
            return { users: res.data }
          })
          .catch((e => {
            //errorメソッドにはステータスコードと表示するメッセージを指定する
            error({ users: e.response.status, message: '404Error!!!!!' })
          }))
      }
    }
    

    우선 이상입니다.

    좋은 웹페이지 즐겨찾기