在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'; }
我可以得到主机和端口,但不是协议。
现在有两种方法可以获得主机和端口:
- 使用
config.json
文件 - 使用
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也可以自动进行检入。