6

使用Nuxt开发通用 JS 应用程序,我正在尝试配置webpack 的开发代理,以便仅在开发中,请求/api被代理到http://127.0.0.1:500/api他们将到达 Python REST API 的位置。按照 Nuxt 文档,我扩展了 webpack 配置nuxt.config.js如下所示:

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 dev 代理没有捕获/api路径并执行代理。只是为了确认代理目的地正在工作,如果我访问http://127.0.0.1:5000/api/things,我会得到预期的 API 响应。为什么,当我扩展 Nuxt webpack 配置以启用 webpack dev 代理时,代理不起作用?

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

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

我很高兴使用@nuxt/proxy 模块而不是(在上面?)webpack 开发代理,如果它只能在开发中工作的话。

4

2 回答 2

3

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

export default {
  // other config ...

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

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

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

于 2021-02-25T17:50:50.087 回答
1

呃,我叫错树了。

Nuxt需要代理,即使在生产中也是如此。当我的初始请求被处理并且应用程序在服务器端呈现时,任何 API 请求都需要被代理,因为节点服务器正在执行调用,而不是浏览器,所以这些 API 请求甚至不会像 nginx 一样到达我的生产路由器或 HAProxy(它通常为相应的服务进行路由)//api

于 2018-09-10T21:34:54.167 回答