首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证我的node.js实例是开发的还是生产的

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

Stack Overflow用户
提问于 2012-05-22 09:04:53
回答 3查看 65.7K关注 0票数 72

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

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

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-22 17:27:50

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

NODE_ENV=production node app.js

带有Express、Socket.IO和其他的应用程序使用process.env.NODE_ENV来确定环境。

在开发中,您可以省略这一点,只需使用node app.js正常运行应用程序即可。

您可以检测代码中的环境,如下所示:

代码语言:javascript
复制
var env = process.env.NODE_ENV || 'development';
loadConfigFile(env + '.json', doStuff);

资源:

How do you detect the environment in an express.js app?

票数 130
EN

Stack Overflow用户

发布于 2012-05-22 11:12:35

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

代码语言:javascript
复制
node ./server.js dev

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

代码语言:javascript
复制
var env = process.argv[2] || 'dev';
switch (env) {
    case 'dev':
        // Setup development config
        break;
    case 'prod':
        // Setup production config
        break;
}

另外,我创建了module,这使得配置过程变得更容易。也许它会对你有所帮助。

票数 16
EN

Stack Overflow用户

发布于 2017-09-27 16:07:20

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

  1. 硬编码这些值使得以后很难更改它们。您必须发布应用程序的新版本才能更改这些值。

  1. 这是一个严重的安全冲突,因为生产级配置数据和密码不应该存储在代码中。这些敏感数据很容易泄露。

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

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

代码语言:javascript
复制
$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js

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

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

代码语言:javascript
复制
DB_HOST=1.2.3.4
DB_USER=someusername
DB_PASSWORD=somerandompassword

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10694571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档