【问题标题】:sails.js Is it possible to set process.env variables from application?sails.js 是否可以从应用程序设置 process.env 变量?
【发布时间】:2014-10-13 17:09:37
【问题描述】:

我正在尝试使用 npm 模块 fb 来使用 facebook api。配置文件位于模块中,这是相同的快照

var config = { };

// should end in /
config.rootUrl  = process.env.ROOT_URL                  || 'http://localhost:3000/';


config.facebook = {
    appId:          process.env.FACEBOOK_APPID          || '130243393813697',
    appSecret:      process.env.FACEBOOK_APPSECRET      || 'c82696768ae4ad8b63db874cb64eb558',
    appNamespace:   process.env.FACEBOOK_APPNAMESPACE   || 'nodescrumptious',
    redirectUri:    process.env.FACEBOOK_REDIRECTURI    ||  config.rootUrl + 'login/callback'
};

module.exports = config;

我不想更改模块的配置文件,因为node_modules 文件夹保存在gitignore 列表中。为了将模块配置为使用我的应用程序的appIdappSecret,我需要设置process.env 变量FACEBOOK_APPIDFACEBOOK_APPSECRET

我知道可以在调用风帆升降机时完成,但是否可以通过任何方式在应用程序内设置这些值,以便我只需调用

帆升

没有任何这些变量并且应该自动设置?或者实现我在这里尝试做的最好方法是什么?

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    您应该在您的应用程序之外设置环境变量。

    您也可以使用node app.js,而不是sails lift。有了它,您可以为您的节点应用程序定义环境变量:

    $> FOO='bar' node app.js

    在你的情况下:

    $> FACEBOOK_APPID='232322a22' FACEBOOK_APPSECRET='mysecrete' node app.js

    如果你想在你的应用程序中设置这个变量(我不建议这样做!)你可以在包含你的 npm-module 之前设置它们。例如在你的config/bootstrap.js:

    module.exports.bootstrap = function(cb) {
    
      process.env.FACEBOOK_APPID = "myvar";
      process.env.FACEBOOK_APPSECRET = "mysecrete";
      sails.facebook = require("yourmodule");
    
      cb();
    };
    

    【讨论】:

    • 这就是我目前正在做的事情,但这对我来说似乎很容易出错,以防有人在启动应用程序时忘记传递这些参数。如果这是我在提升服务器时将始终使用的东西,那么实现它的最佳方法是什么?
    • 顾名思义,这个变量应该设置在你的应用之外——但我编辑了我的解决方案,让你将它们设置到你的风帆应用中。
    【解决方案2】:

    Here是在Sails中“Production”、“Staging”和“Development”感觉碎片化时设置环境变量的好链接。

    Here 是一个快速视频教程,它简单地解释了如何在 node.js 中创建环境变量

    第一步: 安装包 dotenv 作为依赖

    $ npm install dotenv --save
    

    第二步: 然后在 app.js 中 require dotenv 并加载 .env 文件

    var dotenv = require('dotenv');
    dotenv.load();
    

    第三步: 在根文件夹中创建一个 .env 文件(即与 app.js 文件处于同一文档级别)

    第四步: 添加环境变量

    S3_KEY=enfiownqefniqofewqofnieqwvewlk
    S3_SECRET=123456789
    

    现在您可以在应用程序的任何位置(可能在某些配置/文件中)访问这些环境变量:

    return {
      key: process.env.S3_KEY,
      secret: process.env.S3_SECRET,
      region: 's3-eu-west-1',
      bucket: 'myBucket',
      s3params: {
        ACL: 'public-read'
      }
    }
    

    感谢 Noah Bass 提供本教程。

    【讨论】:

    • 这种方法存在一个问题:当使用sails generate,或任何其他sails command时,不需要'app.js'文件,因此不包括env变量。跨度>
    • 还有一个问题。TypeError: dotenv.load is not a function。要解决这个问题 - 只需在 app.js 的开头添加 require('dotenv').config(); 而不是 @Eli Peters 推荐的内容
    猜你喜欢
    • 2021-07-13
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多