在LoopbackJS中:如何在启动脚本或服务器端代码中获取服务器协议(http或https)?

在服务器端的JS文件,说send-email.js ,我想创build一个超链接发送电子邮件

 var config = require('../../server/config.json'); function sendEmail() { var url = config.protocol + '://' + config.host + ':' + config.port + '/login'; //code to send e-mail follows... } 

我有config.json文件中configuration的协议,主机和端口,并使用我能够成功地创build超链接。

我也使用LoopbackJS的启动脚本 ,其中app参数如下所示传递:

 module.exports = function (app, cb) { var url = 'http://' + app.get('host') + ':' + app.get('port') + '/login'; } 

我可以得到主机和端口,但不是协议。

现在有两种方法可以获得主机和端口:

  1. 使用config.json文件
  2. 使用app.get方法

没有app.get('protocol')来获取协议,所以我configuration它在config.json文件,但我想自动获取协议,以防止部署到服务器时更改文件。

有没有什么像获取协议(或主机和地址)自动取决于这个nodejs应用程序的托pipe位置,而不是configuration它。

我很乐意接受来自NodeJS,ExpressJS或LoopbackJSangular度的答案。

如果您的主要目标是避免在部署时更改configuration文件,那么还有另一种select。

代替获取协议,在每个将运行该应用程序的主机上设置一个环境variables。 然后在config.local.js中重写config.json中的'protocol'设置。

config.json:

 { "restApiRoot": "/api", "host": "0.0.0.0", "port": 3000, "protocol": "http" ... } 

config.local.js:

 module.exports = { "host": process.env.APPNAME_API_HOST, "port": process.env.APPNAME_API_PORT, "protocol": process.env.APPNAME_API_PROTOCOL ... } 

服务器启动config.sh或.bashrc(如果bash)运行应用程序的用户:

 export APPNAME_API_HOST=0.0.0.0 export APPNAME_API_PORT=3333 export APPNAME_API_PROTOCOL=https 

(如果使用strong-pm运行,这些将使用slc ctl servicename env-set ENV=value命令slc ctl servicename env-set ENV=value

这允许您在任何设置了variables的环境中使用相同的config.local.js文件,并且环境configuration是特定于主机的。 无需更改文件,服务器env config也可以自动进行检入。