nuxtjs / axios跨域

时间:2018-07-16 14:42:33

标签: cross-domain axios http-proxy nuxt.js

我想调用另一个域提供的api,请遵循官方文档,这是nuxt.config.js的一部分:

  modules: ['@nuxtjs/axios'],
  axios: {
    proxy: true,
    baseURL: 'http://localhost:8000/api',
    // prefix: '/api', // it not work
    credentials: true,
  },
  proxy: {
    '/api/douban': {
      target: 'https://api.douban.com',
      changeOrigin: true,
      pathRewrite: { '^/api': '' },
    },
  },

这是调用api的代码:

async search({ commit, state }, data) {
  const res = await this.$axios.$get('/douban/book/search', { params: data });
  commit('SET_BOOK_QUERY', res);
  return res;
},

但它不起作用,因此我在http-proxy-middleware中添加了一些日志,如下所示:

function shouldProxy (context, req) {
    var path = (req.originalUrl || req.url)
    console.log('shouldProxy  path:', context, path);// output:shouldProxy  path: /api/douban /admin/read
    return contextMatcher.match(context, path, req)
  }

似乎配置正确初始化,问题仅在于刷新页面,执行服务器渲染和日志输出时,但浏览器中的请求未触发检查。 有帮助吗?


更新:我忘记了如何解决它,但现在可以在此配置下使用:

  this.$axios.$get(
     `/api/proxy/lylares/netmusic/?query=music&id=${id}&limit=2&offset=0`,
     { params: { id, limit, offset } },
  )

配置:

  axios: {
    proxy: true,
    prefix: '/api', // it only work when proxy is enabled
    credentials: true,
  },
  proxy: {
    // '/api/proxy/lylares': {
    //   target: 'https://api.berryapi.net',
    //   changeOrigin: true,
    //   pathRewrite: { '^/api/proxy/lylares': '' },
    // },
    '/api': {
      target: IS_DEV || process.server ? 'http://localhost:8000' : 'https://my.space',
      changeOrigin: true,
    },
  },

0 个答案:

没有答案