2016-08-05 162 views
0

我可以根据请求经历哪个域来设置环境变量吗?根据域,我可以在node.js中设置环境变量吗?

我所想的是,我有我的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; 
} 

我thinkg这样做这种方式,因为我真的很喜欢用一个节点模块像i18n或类似,但使用相同的代码库,然后只在特定的JSON文件添加不同语言的变量。

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

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

值得一提的是,在每种语言网站的流量是相当低(低于10K每月为这两种语言)

再次提及这可能是值得一提的是,我打算,如果这些网站部署到Heroku的这很重要。

回答

2

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

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

如果您按每个连接进行连接,它甚至不会起作用。来自法国的第一位客户将设置process.env.LANGUAGEfr,然后来自德国的第二位客户将其设置为de,然后在您回复第一位客户(法语为法语)时,您最终会以德文向他提供该页面。

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


的正确位置附上这样的事情是可变的,你唯一获得每个连接:请求对象和响应对象(通常简称为reqres)。如果你想要一些标准的东西,用一个中间件向请求对象添加一个伪头。我个人只是做req.lang = 'de';

相关问题