如何根据环境更改 Meanapp 或 Nodejs 应用程序中的基础 Url?
How can i change the base Url in Meanapp or Nodejs app based on Environment?
例如:-
我 运行 本地应用 API(returns json)
http://localhost:8000/userslist-(returnsjson)
我可以使用什么插件来更改 Mean App 中的 baseurl?
请建议一个插件,我现在正在使用一些代码来启动服务器:-
app.set('port',process.env.PORT||8000)
//console.log('Your app running on Environment :-',process.env.PORT);
var server=http.createServer(app).listen(app.get('port'),function(){
console.log('express server listening on port'+app.get('port'));
});
但我认为它可能不会产生所需的结果。
示例:- 现在我正在调用 api http.get(baseurl+'user/1'),其中 baseurl='http://localhost:8000'。
当应用程序部署到开发服务器时,它应该使用 dev string 重写 baseurl .. http://dev.mydomain.com
而不是 localhost:8000
以与生产相同的方式。对于问题的混淆,我们深表歉意。
提前感谢您的帮助!!
如果 "baseurl",您指的是域。 . .你无法真正改变它。它要么在本地主机上,要么在您设置的任何服务器的域中。除非您向 /etc/hosts
添加一个条目,将 localhost 指向其他域。如果你的意思是路径的一部分。 . .这就是 express 的用途("MEAN" 中的 "E")。只是:
var express = require('express');
var app = express();
app.get('/userlist', function() { // get users from Mongo });
如果您的意思 其他 而不是其中之一,那么您需要澄清您的问题。也许举一个想要的例子 output/effect.
编辑:
哦,你要根据环境指向不同的端口吗?
编辑 2:
根据您的意见,您不需要为此进行配置。大多数时候,您只想使用相对路径并让服务器找出域部分。例如,不要重定向到 "my.specialdomain.com/foo." 只需重定向到“/foo”,Express/the server/the 浏览器将完成剩下的工作。与客户端链接相同 - 只需使用相对路径:
<a href="/foo/bar">Blah</a>
与客户端请求相同。他们理解相对路径,所以你可以(大部分时间)使用类似 http.get('/foo/bar')
的东西(不确定你使用的是什么库,所以根据需要进行调整)。
如果出于某种原因,您需要 包含域 - 比如如果您想从 http 重定向到 https - 您可以从主机 header 获取它.使用 express,只需使用 req.hostname
。这将为您提供域减去端口。然后,您可以根据需要有选择地包含一个端口。如果你需要经常这样做,你可能会考虑使用一个特殊的中间件函数来设置它。例如:
app.use(function(req, res, next) {
// Or maybe a switch on process.env.NODE_ENV if you have more than 2 environments
req.hostWithPort = req.hostname + (process.env.NODE_ENV === 'production' ? '' : ':' + app.get('port'));
next();
});
然后在任何需要的地方使用它,例如:
res.redirect(301, 'https://' + req.hostWithPort);
例如:-
我 运行 本地应用 API(returns json)
http://localhost:8000/userslist-(returnsjson)
我可以使用什么插件来更改 Mean App 中的 baseurl?
请建议一个插件,我现在正在使用一些代码来启动服务器:-
app.set('port',process.env.PORT||8000)
//console.log('Your app running on Environment :-',process.env.PORT);
var server=http.createServer(app).listen(app.get('port'),function(){
console.log('express server listening on port'+app.get('port'));
});
但我认为它可能不会产生所需的结果。
示例:- 现在我正在调用 api http.get(baseurl+'user/1'),其中 baseurl='http://localhost:8000'。
当应用程序部署到开发服务器时,它应该使用 dev string 重写 baseurl .. http://dev.mydomain.com
而不是 localhost:8000
以与生产相同的方式。对于问题的混淆,我们深表歉意。
提前感谢您的帮助!!
如果 "baseurl",您指的是域。 . .你无法真正改变它。它要么在本地主机上,要么在您设置的任何服务器的域中。除非您向 /etc/hosts
添加一个条目,将 localhost 指向其他域。如果你的意思是路径的一部分。 . .这就是 express 的用途("MEAN" 中的 "E")。只是:
var express = require('express');
var app = express();
app.get('/userlist', function() { // get users from Mongo });
如果您的意思 其他 而不是其中之一,那么您需要澄清您的问题。也许举一个想要的例子 output/effect.
编辑:
哦,你要根据环境指向不同的端口吗?
编辑 2:
根据您的意见,您不需要为此进行配置。大多数时候,您只想使用相对路径并让服务器找出域部分。例如,不要重定向到 "my.specialdomain.com/foo." 只需重定向到“/foo”,Express/the server/the 浏览器将完成剩下的工作。与客户端链接相同 - 只需使用相对路径:
<a href="/foo/bar">Blah</a>
与客户端请求相同。他们理解相对路径,所以你可以(大部分时间)使用类似 http.get('/foo/bar')
的东西(不确定你使用的是什么库,所以根据需要进行调整)。
如果出于某种原因,您需要 包含域 - 比如如果您想从 http 重定向到 https - 您可以从主机 header 获取它.使用 express,只需使用 req.hostname
。这将为您提供域减去端口。然后,您可以根据需要有选择地包含一个端口。如果你需要经常这样做,你可能会考虑使用一个特殊的中间件函数来设置它。例如:
app.use(function(req, res, next) {
// Or maybe a switch on process.env.NODE_ENV if you have more than 2 environments
req.hostWithPort = req.hostname + (process.env.NODE_ENV === 'production' ? '' : ':' + app.get('port'));
next();
});
然后在任何需要的地方使用它,例如:
res.redirect(301, 'https://' + req.hostWithPort);