我用简单的API制作了一个Web应用程序。前端和API的代码均由同一主机提供。前端通过发出基本的http请求来使用API。在开发过程中,我一直在前端使用本地运行的服务器的端口3000发出这些请求。
在生产服务器(AWS EC2实例)上执行此操作的最佳方法是什么?
我如何轻松地在开发代码中对此进行概括,所以我不必更改它
axios.get("localhost:3000" + otherParams)
.then(response => {
//use the response to do things
});
})
到
axios.get("http://99.999.999.999:80" + otherParams)
.then(response => {
//use the response to do things
});
})
每次我将更新推送到实时服务器时?这只是Web开发人员必须忍受的东西吗?抱歉,这是一个愚蠢的问题。
答案 0 :(得分:0)
您可以创建config.js文件:
var configs = {};
configs.appPort = 3000;
configs.host = '192.168.99.100';
module.exports = configs;
导入配置文件:
var configs = require('./config');
Axios:
axios.get(configs.host + ":" + configs.appPort + "/" + otherParams)
.then(response => {
//use the response to do things
});
})
您还可以创建如下环境变量:
configs.isProduction = false;
configs.localHost = "localhost";
configs.productionHost = "192.168.99.100";
然后,您可以在应用中检入它是否正在生产,请使用productionHost,否则,请使用localHost。
答案 1 :(得分:0)
我们绝对不必每次都那样改变我们的代码! (感谢编码之神)
所以我认为您追求的是environment variables
例如:您可以设置一个名为SERVER_URL
的环境变量
然后,当您在本地运行时,该变量为localhost:3000
,但是当您部署到亚马逊时,可以将其设置为http://99.999.999.999:80
在节点中,您像这样消耗变量
process.env.WHATEVER_YOUR_VARIABLE_NAME_IS
所以在您的情况下
axios.get(process.env.SERVER_URL + otherParams)
dotenv是一个有助于创建这些变量的流行模块,值得一看。
作为帮助您(并希望不要让您感到过多困惑)的一个小小的奖励答案,axios可以让您create your own instance of axios,这样您就不必重复自己了。他们的例子是
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
所以您可以做类似
的操作const api = axios.create({
baseURL: process.env.SERVER_URL
});
然后,您可以将axios
呼叫替换为新的axios实例(api
)
类似这样的事情。
api.get(otherParams)
希望这能使您重回正轨!