当前位置: 首页 > 知识库问答 >
问题:

节点vue.js在开发模式下运行时的不同代码场景

穆仲卿
2023-03-14

我有Vue.js前端应用程序和基于ExpressJS的nodeJS后端。ExpressJS还用作静态构建的Vue.js应用程序的web服务器

前端应用程序通过rest和WebSocket与express后端通信。它使用window.location实例中的url主机,可以轻松地与后端通信

在生产模式下,当在静态expressJS服务器区域中构建应用程序时,一切工作都很完美

在开发模式下,Vue使用它自己的web服务器,并且基于window.location的后端URL是不正确的,因为在同一主机和端口上没有表达式。

所以我的问题是,如果运行在dev模式下,是否可能更改一些代码块?

比如这样的东西:

if( devmode) 
{
 const url = "http://somebackendhost/rest"
 }
  else {

   const url = location.host ....
  }


}

共有2个答案

南门星河
2023-03-14

我假设您正在使用Vue CLI开发您的Vue应用程序

在Vue CLI中,可以使用环境变量

if(process.env.NODE_ENV === "development")
{
}

这得益于WebPack的Define插件,其最大的优点是process.env.node_env在构建时被真实值替换。因此,在生产版本中,Webpack将只看到if(“production”===“development”){},并高兴地在优化阶段删除代码,因为它知道这永远不可能是真的

但我不会用这种方法来解决你的问题。使用不同的API服务器(与服务Vue SPA的服务器不同)很容易导致CORS问题

正是针对这个用例,Vue CLI(以及在引擎盖下使用的Webpack Dev server)支持代理

vue.config.js

module.exports = {
  devServer: {
    proxy: {
      '^/api': {
        target: 'http://localhost:58300/',
        ws: true, // websockets
        changeOrigin: true,
      }
    }
  },
},

此配置使Vue Dev server将对/API的任何请求代理到运行在http://localhost:58300/(您的节点/Express应用程序)的其他服务器上,并更改源(因此浏览器认为响应来自Dev服务器)

所有这些都可以在没有Vue CLI的情况下完成,但您需要自己在Webpack Config...

端木渝
2023-03-14

您无法从浏览器访问此信息。

但有三种解决方案:

在编译时,在代码中创建一个定义devmode的变量(常量devmode=true;)

因为绑定程序可以缩小变量名或出于安全原因更改范围,所以可能会出现无法访问的情况。

因此,第二个解决方案是在localstorage中定义devmode。

第三种解决方案几乎是最好的。

如果您正在开发,那么您可能是通过localhost访问您的web应用程序。

location.hostname将返回主机的名称,因此您可以执行以下操作:

const devmode = location.hotname == 'localhost';

不要这样做。使用本地REST API开发一个完全工作的web应用程序,并在某个变量中定义REST API的URL,因此当您准备生产应用程序时,您或编译器只需更改REST API代码中的URL adress变量。

为什么这是最好的解决方案?因为它不会影响最终用户的性能,而且他们将加载更少的代码,这是最好的做法。

编译生产版本时不要忘记删除所有devmode代码路径!

 类似资料:
  • 我尝试从activator项目运行项目'play-scala':运行“activator New”控制台,选择“play-scala”模板,在项目文件夹中运行“activator run”。 但我总是有例外:

  • 我试图用一个json rest接口编写一个quarkus应用程序,它应该依赖于一个外部库。我想在我的rest实现中从这个库调用一些方法。 因此,我从一个简单的quarkus rest应用程序开始 我通过运行 成功之后,我尝试在quarkus开发模式下启动quarkus问候应用程序 我出错了

  • 问题内容: 我如何启用Notch 在Eclipse的此视频中谈论的“运行时调试”功能? 作为测试,我希望能够在运行时编辑以下代码的输出并将其更改为“ Hello Runtime Debugging”。 编辑: 我修改了代码,现在我得到了想要的结果。Suraj Chandran在下面的回答对此进行了解释。 问题答案: Eclipse开箱即用地支持调试期间的热交换代码。 在调试时,只需更改任何代码并保

  • 我是否遗漏了任何配置等? 事先非常感谢

  • 我有一个多分支管道架构的以下Jenkinsfile 我试图在Ubuntu和Red Hat节点上并行运行“构建”阶段,而仅在Ubuntu节点上运行“测试”阶段。 任何人都可以帮助我指定如何选择在哪些节点上运行哪些阶段。我在网上找到的解决方案很少,但他们建议重写构建阶段两次:一次用于Red Hat节点,另一次用于Ubuntu节点。难道没有办法在没有代码重复的情况下做到这一点吗? 非常感谢

  • 我使用Scene Builder和Intelij IDEA来构建JavaFX应用程序。当我在scene Builder中预览时,这个场景看起来是正确的,但当我在IntelliJ中执行时,这个场景被放大了1.5倍。在Scene Builder中,舞台是1280x800,但当我运行程序时,它是1920x1200,尽管我设置了1280x800的场景大小。 这似乎是由于Windows10对应用程序进行了缩