Javascript 来自IP地址发生变化的机器的JS服务和REST API

Javascript 来自IP地址发生变化的机器的JS服务和REST API,javascript,reactjs,flask,npm,axios,Javascript,Reactjs,Flask,Npm,Axios,我有一个使用React的应用程序,它通过axios与REST服务器接口。REST服务器(flask)位于为JS项目的构建提供服务的同一台机器上。所服务的项目是npm运行构建的输出。然后使用NPMServe部署此包。然后从不同IP的远程计算机查看web界面 我遇到的问题是,为站点提供服务的机器的IP和REST API可能会更改。如何更改axios动态调用的IP?目前,我有一个脚本可以在js构建中搜索IP字符串,并用当前IP替换它 使用像ip这样的实用程序只返回localhost。我想我需要找到一种

我有一个使用React的应用程序,它通过axios与REST服务器接口。REST服务器(flask)位于为JS项目的构建提供服务的同一台机器上。所服务的项目是npm运行构建的输出。然后使用NPMServe部署此包。然后从不同IP的远程计算机查看web界面

我遇到的问题是,为站点提供服务的机器的IP和REST API可能会更改。如何更改axios动态调用的IP?目前,我有一个脚本可以在js构建中搜索IP字符串,并用当前IP替换它


使用像
ip
这样的实用程序只返回localhost。我想我需要找到一种方法来获得谁在为脚本服务的IP

您可以使用
env
变量来解决这些问题。一种流行的方法是使用。您的
package.json
文件在
script
部分将有一个
build
命令。您必须修改这些配置,将所需配置添加为
环境变量
,并在需要时在代码中使用它

例如:

{
  "scripts": {
    "build:prod": "cross-env API_URL=http://myserverip.com NODE_ENV=production webpack --config     build/webpack.config.js",
    "build:dev": "cross-env API_URL=http://localhost:8000 NODE_ENV=development webpack --config     build/webpack.config.js"
  }
}
然后可以使用不同的命令来构建它们。要生成prod run
npm run build:prod
。要生成dev,请运行
npm运行build:dev

在代码中,您可以使用
process.env.API_URL
(在您编写ip地址/主机名的地方),它将根据构建具有不同的值。要允许webpack替换这些
env
变量,请使用webpack
将插件定义为

new webpack.DefinePlugin({
  'process.env': {
    NODE_ENV: JSON.stringify(process.env.NODE_ENV),
    API_URL: JSON.stringify(process.env.API_URL),
  }
})

如果REST服务器和API共享一个公共服务器,您可以完全省略IP地址,而不是

axios.get('http://123.4.567.89/user?ID=12345')
你可以

axios.get('/user?ID=12345')
除此之外,使用DNS通常是更好的方法:

axios.get('http://my.domain/user?ID=12345')

你为什么要用JS而不是DNS来解决这个问题?很酷。我会试一试,然后再报告。API_URL可以在linux中设置,还是只能在package.json中设置?您也可以在linux中设置。通常,机密最好在操作系统中显示,或在构建过程中动态设置。它从本地网络计算机提供服务,并在本地网络上查看。所以排除了DNS。我仍然会尝试使用无url选项。'/user?ID=12345'对我来说很有效。这应该被标记为答案。