如何在Nuxt中使用Webpack开发代理

时间:2018-09-07 22:51:42

标签: webpack nuxt.js nuxt-edge

使用Nuxt开发通用JS应用程序,我试图配置webpack's dev proxy,以便仅在开发阶段,对/api的请求被代理到http://127.0.0.1:500/api,他们将使用Python REST API。遵循Nuxt文档之后,我在nuxt.config.jsextended the webpack config像这样:

build: {
  extend (config, { isDev }) {
    // Proxy /api to Python only in dev
    if (isDev) {
      const devServer = {
        proxy: {
          '/api': 'http://127.0.0.1:5000'
        }
      }
      config.devServer = devServer;
    }
  }
}

如果我登录配置,则看到正在应用更改:

...
devServer: { proxy: { '/api': 'http://127.0.0.1:5000' } } }
...

但是,当我访问http://127.0.0.1:8080/api/things时,返回了我的Nuxt应用程序(它在dev中的端口8080上运行),表明webpack开发代理未捕获/api路径并执行了代理。只是为了确认代理服务器目的地是否正常工作,如果我访问http://127.0.0.1:5000/api/things,就会得到预期的API响应。 为什么,当我扩展Nuxt webpack配置以启用webpack开发代理时,该代理不起作用吗?

但是,我在@nuxt/proxy模块上取得了成功,但是关键的是,我找不到一种方法来使其只影响开发而不影响生产。 nuxt.config.js的那部分看起来像这样:

axios: {
  proxy: true
},
proxy: {
  '/api': 'http://127.0.0.1:5000'
},

如果可以使@pack只能在开发中使用,我很乐意使用@ nuxt / proxy模块而不是(在顶部)webpack开发代理。

2 个答案:

答案 0 :(得分:2)

我需要这样做并且能够在 nuxt.config.js 中使用以下内容来解决这个问题

export default {
  // other config ...

  ...process.env.NODE_ENV === 'development' && {
    proxy: {
      '/api': 'http://localhost:8000',
    }
  },
}

如果我们正在进行开发构建,此代码只会在 nuxt 配置中添加代理密钥。

引用用于插入条件对象字段的语法(这是我以前不知道的): https://stackoverflow.com/a/51200448

答案 1 :(得分:0)

呃,我在树错树上。

Nuxt 甚至在生产中都需要进行代理。当我的初始请求得到处理并且应用在服务器端呈现时,所有API请求都需要被代理,因为Node服务器正在执行调用,而不是浏览器,因此这些API请求甚至都不会像nginx那样打到我的生产路由器上或HAProxy(通常将//api路由到适当的服务)。