在服务器上调用 axios,但在页面上调用 axios,而不是在启动时获取或异步数据

Posted

技术标签:

【中文标题】在服务器上调用 axios,但在页面上调用 axios,而不是在启动时获取或异步数据【英文标题】:Call axios on server, but latter on page and not fetch or asyncData on start 【发布时间】:2020-01-13 08:49:16 【问题描述】:

我有一个简单的 nuxt 页面,它使用 fetch 从服务器 (axios) 中提取数据以填充表格以进行初始加载,效果很好。

import axios from 'axios'
import CONST from '@/store/settings.js'
import mix from '@/components/mymixin'

export default 
  mixins: [ mix ],
  data() 
    return 
      msg: new Date(),
      domains: [],
      fields: [
        key: 'name',
        label: 'Domain',
        sortable: true
      ,
        key: 'status', 
        label: 'Status'
      ,
        key: 'development_mode',
        label: 'Bypass CF',
        formatter: value => (value != '0') ? true : false, 
        sortable: true
      ,
        key: 'paused',
        label: 'Paused', 
        sortable: true
      ,
        key: 'actPageRules',
        label: 'Page Rules'
      ],
    
  ,
  methods: 
    info ( item, ix ) 
      axios.get( `$CONST.base/zones/$item.id/pagerules`,  headers: CONST.headers )
      .then( (res) =>  console.log( res.data ) )
    
  ,
  mounted() 
    var me = this
    setInterval(function()
      me.msg = new Date()
    , 1000 )
    this.domains = this.$store.state.domains
  ,
  fetch (  store, params   ) 
    const domains   = store.$axios.get( `$CONST.base/zones?per_page=$CONST.pg&account.id=$CONST.uid`,  headers: CONST.headers )
      .then( (res) =>  store.state.domains = res.data.result )
    // const registrar = axios.get( `$CONST.base/accounts/$CONST.uid/registrar/domains`,  headers: CONST.headers )
    //   .then( (res) =>  this.domains = store.state.registrar = res.data.result )
    return Promise.all([ domains ])
  , 
  asyncData(  store, params  )

  

我的表格模板是这个

<b-table class="table-responsive" striped hover :fields="fields" :items="domains">

  <template v-slot:cell(name)="data">
    <a :href="`#$data.value`"> data.value </a>
  </template>

  <template v-slot:cell(development_mode)="data">
    <b-form-checkbox v-model="data.value" name="devmode" switch />
  </template>

  <template v-slot:cell(paused)="data">
    <b-form-checkbox v-model="data.value" name="paused" switch/>
  </template>

  <template v-slot:cell(actPageRules)="data">
    <b-button size="sm" @click="info(data.item)" class="mr-1" variant="warning">
      Page Rules
    </b-button>
  </template>
</b-table>

并且表格正确呈现。现在,我想在服务器上使用info 方法axios.get 触发!

我得到的错误是由于 CORS 我无法在客户端上运行它..

所以我的问题是,如何触发(通过点击或无论如何)方法在服务器上而不是在客户端上运行?

非常感谢

【问题讨论】:

【参考方案1】:

经过大量使用字符串关键字的 google-ing 后,我明白了

--对于其他偶然发现这里的 Google 员工,为了能够防止 CORS 错误并向某些远程 API 发出服务器请求(在我的情况下,它是 CloudFlare 和 MailChimp + Godaddy 用于 DNS),我们必须 代理 我们的请求通过我们的服务器!

此页面包含我们自己放置和构建它的所有详细信息>

https://axios.nuxtjs.org/options

【讨论】:

以上是关于在服务器上调用 axios,但在页面上调用 axios,而不是在启动时获取或异步数据的主要内容,如果未能解决你的问题,请参考以下文章

GET 请求在邮递员中有效,但在 Axios 中失败

如何在(子)组件上使用 Axios 调用 API 并将结果呈现在 Nuxt 中的 Page(父)组件上?

java客户端调用webservice 超时问题

如何解决java axis 调用webservice服务器操作异常

Axios 'Get' 函数未调用

AXIS2远程调用WebService示例(Eclipse+AXIS)