我可以根据域设置node.js中的环境变量吗?

时间:2016-08-05 11:26:48

标签: node.js heroku

我可以根据请求通过哪个域来设置环境变量吗?

我在想的是我已经启动并运行了我的node.js应用程序,我分配了两个域,相同的域,具有不同的TLD:如下所示

mydomain.fr
mydomain.de

并执行类似此伪代码的操作

switch(app.host) {
  case 'mydomain.fr':
    process.env.LANGUAGE = 'fr';
  break;

  case 'mydomain.de':
    process.env.LANGUAGE = 'de';
  break;

  default:
    process.env.LANGUAGE = 'en';
  break;
}

我想这样做是因为我真的想使用像i18n这样的节点模块或类似但使用相同的代码库,然后在特定的json文件中添加不同的语言变量。

如果我想在像意大利(.it)这样的新国家或其他任何地方推出我的网站,这将使其变得容易多了。如果我将更新推送到网站,它会自动推送到所有语言。

我的主要问题现在是第一个:这可能吗? 第二,这种方法的优点和缺点是什么?我已经列出了一些专业人员,现在唯一可以想到的是,如果我在不同的服务器上设置页面,那么一个Web服务器需要比我想要的更大/更强。

值得一提的是,每个语言网站的流量都相当低(两种语言每月低于10k)

值得一提的另一个提及是,如果重要的话,我计划将这些网站部署到Heroku。

1 个答案:

答案 0 :(得分:2)

如果两个域同时运行,它将无法工作。

node.js中的process等全局变量就是:global。如果您运行两个服务(应用程序)会发生什么,第一个将变量process.env.LANGUAGE设置为某个值,第二个将覆盖它。

如果按连接进行,它甚至不会起作用。来自法国的第一位客户将process.env.LANGUAGE设置为fr,然后来自德国的第二位客户将其设置为de,然后当您回复第一位客户(法国人)时,您将最后用德语给他一页。

请记住,虽然node.js只是单线程,但我们仍然需要担心多个连接,因为它们可以是并发的。

附加此类内容的正确位置是您为每个连接唯一获取的变量:请求对象和响应对象(通常缩写为reqres)。如果您想要标准的东西,请使用中间件向请求对象添加伪标头。我亲自做req.lang = 'de';