Skip to content

Instantly share code, notes, and snippets.

@yasir-netlinks
Forked from moreta/http.js
Created December 21, 2018 17:15
Show Gist options
  • Select an option

  • Save yasir-netlinks/139e1d9cb99b0e89872caf0394526d1f to your computer and use it in GitHub Desktop.

Select an option

Save yasir-netlinks/139e1d9cb99b0e89872caf0394526d1f to your computer and use it in GitHub Desktop.

Revisions

  1. @moreta moreta revised this gist Jan 16, 2018. 2 changed files with 23 additions and 23 deletions.
    23 changes: 0 additions & 23 deletions axios_interceptor_sample.js → http.js
    Original file line number Diff line number Diff line change
    @@ -71,26 +71,3 @@ instance.interceptors.response.use((response) => {
    export const http = instance


    /**
    * src/api/test.js
    */
    import { http } from './http'

    export default {

    find (query) {
    return http.get(`/test`, {
    params: query
    })
    },

    create (params) {
    return http.post(`/test`, { test: params })
    },

    update (params) {
    return http.put(`/test`, { test: params })
    }

    }

    23 changes: 23 additions & 0 deletions text.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    /**
    * src/api/test.js
    */
    import { http } from './http'

    export default {

    find (query) {
    return http.get(`/test`, {
    params: query
    })
    },

    create (params) {
    return http.post(`/test`, { test: params })
    },

    update (params) {
    return http.put(`/test`, { test: params })
    }

    }

  2. @moreta moreta created this gist Jan 8, 2018.
    96 changes: 96 additions & 0 deletions axios_interceptor_sample.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,96 @@
    /**
    * src/api/http.js
    */
    import axios from 'axios'
    import qs from 'qs'

    /**
    *
    * parse error response
    */
    function parseError (messages) {
    // error
    if (messages) {
    if (messages instanceof Array) {
    return Promise.reject({ messages: messages })
    } else {
    return Promise.reject({ messages: [messages] })
    }
    } else {
    return Promise.reject({ messages: ['エラーが発生しました'] })
    }
    }

    /**
    * parse response
    */
    function parseBody (response) {
    // if (response.status === 200 && response.data.status.code === 200) { // - if use custom status code
    if (response.status === 200) {
    return response.data.result
    } else {
    return this.parseError(response.data.messages)
    }
    }

    /**
    * axios instance
    */
    let instance = axios.create({
    baseURL: `/your/host/api/v1`,
    paramsSerializer: function (params) {
    return qs.stringify(params, { indices: false })
    }
    })

    // request header
    instance.interceptors.request.use((config) => {
    // Do something before request is sent

    // api tokenなどを利用してheaderに載せる場合
    // const apiToken = sessionStorage.getItem('token')
    // config.headers = { 'Custom-Header-IF-Exist': apiToken }
    return config
    }, error => {
    return Promise.reject(error)
    })

    // response parse
    instance.interceptors.response.use((response) => {
    return parseBody(response)
    }, error => {
    console.warn('Error status', error.response.status)
    // return Promise.reject(error)
    if (error.response) {
    return parseError(error.response.data)
    } else {
    return Promise.reject(error)
    }
    })

    export const http = instance


    /**
    * src/api/test.js
    */
    import { http } from './http'

    export default {

    find (query) {
    return http.get(`/test`, {
    params: query
    })
    },

    create (params) {
    return http.post(`/test`, { test: params })
    },

    update (params) {
    return http.put(`/test`, { test: params })
    }

    }