验证我的node.js实例是dev还是production

gui*_*mie 53 javascript node.js express cloud9-ide joyent

现在,每当我想将node.js服务器部署到我的生产服务器时,我需要更改我的数据库和外部API的各种连接的所有IP/DNS /用户名/密码.

这个过程很烦人,有没有办法验证当前运行的node.js实例是在cloud9ide还是实际上我的生产中的智能机器?

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

谢谢

ale*_*lex 81

通常,您应该在生产中运行节点应用程序,如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

资源:

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

  • 在Express 3.x和4.x中,env变量通过表达自身[here](https://github.com/visionmedia/express/blob/master/lib/application.js#L52)来设置为`development` . (4认同)

Vad*_*hev 15

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

node ./server.js dev
Run Code Online (Sandbox Code Playgroud)

在您的脚本中,您需要处理此参数并设置您需要的配置.

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

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

  • +1 这允许您创建多个设置,从开发到舞台再到生产。 (3认同)

小智 9

为此,您只需借助环境变量进行检查即可执行任何操作。

if (process.env.NODE_ENV === "production") {
  //do something in production
}

if (process.env.NODE_ENV == "development") {
   //do something in development
}
Run Code Online (Sandbox Code Playgroud)


Sla*_* II 5

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

  1. 对这些值进行硬编码会使以后很难对其进行更改.您必须发布新版本的应用程序才能更改这些值.

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

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

例如:DB_HOST,DB_USER,DB_PASSWORD.然后你可以通过这种方式将这些值传递给你的app:

$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js
Run Code Online (Sandbox Code Playgroud)

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

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

DB_HOST=1.2.3.4
DB_USER=someusername
DB_PASSWORD=somerandompassword
Run Code Online (Sandbox Code Playgroud)

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


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

请在detect-environment页面上查看更多详细信息和用例.