如何使用 Nuxt 为不同的 API 服务器设置代理?

Posted

技术标签:

【中文标题】如何使用 Nuxt 为不同的 API 服务器设置代理?【英文标题】:How to set proxy for different API server using Nuxt? 【发布时间】:2020-07-11 13:45:31 【问题描述】:

所以我有 2 个应用程序:

    可通过 http://10.10.120.4:3333 访问的 Adonis API 服务器

    一个使用 Nuxt.js 的 s-s-r 应用,可通过http://10.10.120.4:80访问

Nuxt.js 应用程序可在外部使用 url http://my-website.com 访问。我有这个配置的 axios 模块

axios: 
    baseURL: '0.0.0.0:3333/api',
    timeout: 5000

现在的问题是,当我使用 asyncData 请求数据时,它可以工作,但是当请求是从外部 asyncData 发出时,例如 created(),它会抛出一个错误,说缺少 url http:0.0.0.0:3333 这是真的,因为它已经在浏览器中而不是在服务器中运行。

我尝试的第一个解决方案是将 axios 模块的baseURL 更改为此

axios: 
    baseURL: 'http://my-website.com/api',
    timeout: 5000

但是好像nuxt server 找不到,所以我觉得解决办法是做代理,安装@nuxtjs/proxy。

这是我在nuxt.config.js中的代理配置


  proxy: 
    '/api': 'http://my-website.com:3333',
  

然后我只是将我的 axios baseURL 更改为

http://my-website.com/api

但还是不行。

我的问题是,您如何处理这种情况?从浏览器访问不同的服务器?

【问题讨论】:

【参考方案1】:

在 nuxt 项目中使用 Proxy 时,您需要删除 baseUrl 并将 proxy 设置为 true,如下所示。

axios: 
   // Do away with the baseUrl when using proxy
    proxy: true
  ,

  proxy: 
    // Simple proxy
    "/api/": 
      target: "https://test.com/",
      pathRewrite:  "^/api/": "" 
    
  ,

调用您的端点时,请执行以下操作:

// append /api/ to your endpoints
const data = await $axios.$get('/api/users');

结帐希兰article

【讨论】:

以上是关于如何使用 Nuxt 为不同的 API 服务器设置代理?的主要内容,如果未能解决你的问题,请参考以下文章

为 Nuxt.js 编写客户端 API 库

Nuxt 如何在开发或生产环境中设置 baseURL

如何使用 laravel 后端 API 在 nuxt.js 中上传图片

在 nuxt 中针对不同情况使用不同的环境

如何在 Nuxt 中使用动态 CSS 文件?

如何从 Nuxt 3 服务器获取路由参数