在活动节点服务器上调用自己的API的最佳方法是什么?

时间:2019-03-22 00:37:44

标签: node.js express amazon-ec2

我用简单的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开发人员必须忍受的东西吗?抱歉,这是一个愚蠢的问题。

2 个答案:

答案 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)

希望这能使您重回正轨!