@nuxtjs/axios 模块如何配置跨域

发布于 2022-09-07 19:32:51 字数 1116 浏览 10 评论 0

想跨域调用一个接口,按照官方文档, 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/v2/book/search',
      changeOrigin: true,
      pathRewrite: { '^/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);// 输出:shouldProxy  path: /api/douban /admin/tag
    return contextMatcher.match(context, path, req)
  }

说明配置确实被正确初始化了,问题是只有刷新页面进行服务端渲染时才有这个日志,这时的path是页面路由而不是api请求,而页面上的请求却没有被代理。
很奇怪,不知道是哪里配置有问题,请各路大神帮忙。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贱贱哒 2022-09-14 19:32:51

又仔细看了一遍nuxtjs/axios文档,才总算发现了一些问题,一个是prefix配置不是不起作用,而是在proxy enable时才有效,baseUrl是服务端渲染时走的url,如果配置了服务端渲染时就不会走proxy,browserBaseURL同理,因为有的跨域api会在服务端渲染调用,所以不能配置baseUrl, 所有api都需要走proxy,这也是官方文档里proxy开启时只有这一个配置的原因吧。因为所以api都有了前缀api,如何辨别跨域呢?还好proxy是按照注册顺序进行匹配的,所以把跨域的api放在前面优先匹配就好了。

  axios: {
    proxy: true,
    prefix: '/api', // it only work when proxy is enabled
    credentials: true,
  },
  proxy: {
    '/api/proxy/douban': {
      target: 'https://api.douban.com',
      changeOrigin: true,
      pathRewrite: { '^/api/proxy/douban': '' },
    },
    '/api': {
      target: (IS_DEV || process.server)
      ? 'http://localhost:8000'
      : 'https://lijun.space',
      changeOrigin: true,
    },
  },
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文