验证我的node.js实例是开发还是生产

现在,无论何时我想将node.js服务器部署到我的生产服务器,我都需要更改所有IP / DNS /用户名/密码,以便连接到我的数据库和外部API。

这个过程很烦人,有没有办法来验证当前正在运行的node.js实例是在cloud9ide还是实际上是我的生产joyent smartmachine?

如果能够在我的node.js实例运行的服务器上运行,我将添加一个条件,将值设置为prod或dev。

谢谢


通常你应该像这样在生产环境中运行一个节点应用程序:

NODE_ENV=production node app.js

Express,Socket.IO等应用程序使用process.env.NODE_ENV来找出环境。

在开发中,您可以忽略它,只需通过node app.js运行应用程序即可。

你可以像这样在代码中检测环境:

var env = process.env.NODE_ENV || 'dev';
loadConfigFile(env + '.json', doStuff);

资源:

如何在express.js应用程序中检测环境?


我认为设置环境的最简单方法是将命令行参数传递给应用程序。

node ./server.js dev

在你的脚本中,你需要处理这个参数并设置你需要的配置。

var env = process.argv[2] || 'dev';
switch (env) {
    case 'dev':
        // Setup development config
        break;
    case 'prod':
        // Setup production config
        break;
}

另外,我创建的模块使配置过程更容易一些。 也许它会帮助你。


实际上,由于以下原因,我不建议在实际应用程序代码中存储像数据库连接信息,密码,访问令牌等配置值:

  • 对这些值进行硬编码使得以后难以改变它们。 您将不得不发布新版本的应用程序以更改这些值。

  • 这是严重的安全违规,因为生产级配置数据和密码不应该存储在代码中。 泄露这些敏感数据非常容易。

  • 更好的方法是将这些数据外部化并在执行期间将其传递给应用程序。 这通常通过环境变量来完成。 您只需要为每个需要在不同环境之间更改的数据和平定义独特的环境变量。

    例如: DB_HOSTDB_USERDB_PASSWORD 。 然后,您可以通过这种方式将这些值传递给您的应用程序:

    $ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js
    

    实际上,这些值可以被加密并添加到代码库中,然后在部署过程中解密。 但是,请确保将解密密钥安全地存储在部署系统中或由发布工程师交互式提供。 可搭载允许开箱即用。

    在开发环境中变得更简单,因为您可以使用非常方便的dotenv模块。 只需在项目的根目录下创建一个.env文件并添加所有变量即可:

    DB_HOST=1.2.3.4
    DB_USER=someusername
    DB_PASSWORD=somerandompassword
    

    但是,请确保将其从您的VCS中排除,因为每个开发人员可能都希望进行个人配置。 您可以创建一个.env.dist文件来包含默认配置,该配置稍后可用作模板: cp .env.dist .env


    另外,我实现了一个可重用模块,它允许通过分析CLI参数和NODE_ENV变量来自动检测环境。 这对您的开发机器可能很有用,因为您可以通过将CLI参数传递给您的Node.js程序来轻松更改环境,如下所示: $ node app.js --prod 。 使用Gulp也很好: $ gulp build --prod

    请在detect-environment的页面上查看更多的细节和用例。

    链接地址: http://www.djcxy.com/p/77501.html

    上一篇: Verify if my node.js instance is dev or production

    下一篇: rCharts plot won't appear in shiny app using dimple.js