我试图使用sails.js获取当前的网址.
我尝试了以下方法:
req.param('host') and req.param('X-Forwarded-Protocol')
Run Code Online (Sandbox Code Playgroud)
返回undefined.
req.headers.host
Run Code Online (Sandbox Code Playgroud)
返回localhost.但我的域名不是localhost.
怎么弄?
只是为了回答这个问题:没有可靠的跨平台方法来自动检测正在运行的Sails应用程序(或任何其他Node应用程序)的外部URL.下面
getBaseUrl()描述的方法使用用户提供的配置值和默认配置值的组合来对应用程序的URL进行最佳猜测.在任务关键型情况下,建议您预先确定URL并将其保存在自定义环境相关配置值(例如sails.config.appUrl)中,您可以在应用程序的其他位置引用该值.
如果您使用的是Sails> = v0.10.x,则可以使用sails.getBaseurl()来获取应用程序所在的完整协议,域和端口.从Sails v0.10.0-rc6开始,这也会检查sails.config.proxyHost和sails.config.proxyPort,config/local.js如果你的应用程序是通过代理提供的,你可以在你的一个配置文件(如)中手动设置(例如,如果它部署在Modulus.io上,或者通过Nginx服务器代理).
Sails v0.9.x没有sails.getBaseurl,但您可以随时尝试复制代码并实现自己,可能在服务中:
getBaseUrl
function getBaseurl() {
var usingSSL = sails.config.ssl && sails.config.ssl.key && sails.config.ssl.cert;
var port = sails.config.proxyPort || sails.config.port;
var localAppURL =
(usingSSL ? 'https' : 'http') + '://' +
(sails.getHost() || 'localhost') +
(port == 80 || port == 443 ? '' : ':' + port);
return localAppURL;
};
Run Code Online (Sandbox Code Playgroud)
你会注意到这依赖于sails.getHost(),看起来像:
function getHost() {
var hasExplicitHost = sails.config.hooks.http && sails.config.explicitHost;
var host = sails.config.proxyHost || hasExplicitHost || sails.config.host;
return host;
};
Run Code Online (Sandbox Code Playgroud)