配置多种场景

我们的系统是要在不同的环境下运行的,不同的环境可能是不同的端口号,不同的数据库地址,数据库用户和密码,
并且可能有的需要自动重启有的不需要自动重启。
我们在有一个配置的时候是无法满足这么多的场景的,所以我们要为不同的场景做额外配置

场景的种类

场景的种类一般就以下几种

  1. 开发场景
  2. 真实场景
  3. 测试场景
  4. debug场景

    或者再有其他场景就做额外的添加,配制方法都是一样的

开始配置

配置环境

我们可以通过对环境的NODE_ENV赋值来区分不同的环境
我们在通过命令行在运行程序的时候对其进行赋值,不同的场景赋值不一样,在程序中读取这个值来判断是那种场景
首先我们修改package.json的script为:

  "scripts": {
"start":"set NODE_ENV=production&&node bin/www",
"pm2": "pm2 start bin/www ",
"run":"set NODE_ENV=development&&nodemon bin/www",
"test": "set NODE_ENV=test&&echo \"Error: no test specified\" && exit 1"
},

(注意:我们将run 那段话的命令修改了)
这样我们在通过不同的命令启动程序的时候就NODE_ENV的值就是不同的我们就可以根据这个来设置不同的配置

配置不同的配置文件

新建文件夹config
新建三个文件

development.js

 'use strict';
/**
* 开发环境配置文件
*/
var config = {
env: 'development', //环境名称
port: 3001, //服务端口号
mysql_config: {
//mysql数据库配置
},
mongodb_config: {
//mongodb数据库配置
},
redis_config: {
//redis数据库配置
},
};
module.exports=config;

production.js

 'use strict';
/**
* 生产环境配置文件
*/
var config = {
env: 'production', //环境名称
port: 3000, //服务端口号
mysql_config: {
//mysql数据库配置
},
mongodb_config: {
//mongodb数据库配置
},
redis_config: {
//redis数据库配置
}, };
module.exports=config;

test.js

 'use strict';
/**
* 测试环境配置文件
*/
var config = {
env: 'test', //环境名称
port: 3002, //服务端口号
mysql_config: {
//mysql数据库配置
},
mongodb_config: {
//mongodb数据库配置
},
redis_config: {
//redis缓存配置
},
};
module.exports=config;

当然了配置文件的内容可以按自己的喜好随意设置。

统筹配置的文件config.js

我们需要单独写一个模块来统筹这些配置并且判断是哪种环境,并暴露对应配置。
这样我们就在app_need文件夹内新建一个文件叫config.js

 #!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('demo:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
// app.set('port', port); /**
* Create HTTP server.
*/
var server = http.createServer(app.callback());
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening); /**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10); if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
} /**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port; // handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/ function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

我们找到

 var port = normalizePort(process.env.PORT || '3000');

这句话,就是这句话声明了端口号
我们就在这做文章
我们将其修改为:

 //引入配置文件
var config = require('../app_need/config');
console.log('当前运行环境为:'+config.env);
// 将端口号设置为配置文件的端口号,默认值为3000
var port = normalizePort(config.port || '3000');
// 打印输出端口号
console.log('当前监听端口号为: ' + port);

这样我们就通过配置和启动命令的不同监听不同的端口号,我们测试一下运行不同的命令看输出

npm start


运行正常,输出正常

npm run run


运行正常,输出正常

npm test


运行正常,输出正常(这里别忘了我们就是这么设置的
“test”: “set NODE_ENV=test&&echo \”Error: no test specified\” && exit 1”
所以输出是正常的。这边的test可以之后扩展。

配置文件的配置项目

一般情况把配置文件就当全局常量用就好了,因为我们除非手动改,所有的配置一般是不会变的,然后一般情况就是配置各种开关了,数据库地址密码啦,之类的。之后如果那个模块需要用到配置了就可以调用config这个模块读取配置,通过不同的配置来做不同的事情, 觉得有用的大神关注相互关注下呗。

node.js项目多环境配置的更多相关文章

  1. Node.js安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇   一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1. ...

  2. Node.js安装及环境配置之Windows篇(转:https://www.cnblogs.com/zhouyu2017/p/6485265.html)

    Node.js安装及环境配置之Windows篇(原文地址:https://www.cnblogs.com/zhouyu2017/p/6485265.html)   一.安装环境 1.本机系统:Wind ...

  3. Node.js安装及环境配置 for winer

    Node.js安装及环境for Windows 一.安装环境 1.本机系统:Windows 10 Pro(64位) 2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下 ...

  4. Node.js 安装及环境配置之 Windows 篇

    一.安装环境 1.本机系统:Windows 10 企业版(64位)2.Node.js:node-v8.9.4-x64.msi(64位) 二.安装Node.js步骤 1.下载对应自己系统对应的 Node ...

  5. Node.js 安装及环境配置 以及google浏览器安装插件并使用

    一.安装环境 1.本机系统:Windows 10 企业版(64位)2.Node.js:node-v10.16.0-x64.msi(64位) 二.安装Node.js步骤 1.下载对应自己系统对应的 No ...

  6. node.js安装及环境配置超详细教程【Windows系统安装包方式】

    文章目录 Step1:下载安装包 Step2:安装程序 Step3:查看 Step4:环境配置 最后补充: Step1:下载安装包 https://nodejs.org/zh-cn/download/ ...

  7. windows系统下安装 node.js (node.js安装及环境配置)

    node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node. ...

  8. Node.js安装及环境配置之Windows篇---完美,win7已测

    一.安装环境 1.本机系统:Windows 10 Pro(64位) (楼主win7,完美通过)2.Node.js:v6.9.2LTS(64位) (楼主版本2018-11-01下载的最新版本) 二.安装 ...

  9. Windows下node.js安装及环境配置

    1. 安装 官网下载node.js的安装版,一路next,中间可以自定义安装路径 完成后安装目录内容如下 cmd下检查是否安装成功 新版Node.js已自带npm,所以安装Node.js时会一起安装, ...

随机推荐

  1. BZOJ 4808: 马(二分图最大点独立集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=4808 题意: 思路: 这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选 ...

  2. Centos6.5 搭建LAMP环境

    1.Centos6.5 处于对安全的考虑,严格控制网络的进去.所以安装  Apache 或 MySQL 的时候,需要开放 80 或 3306 端口 首先,执行如下命令查看当前防火墙开放了哪些端口: [ ...

  3. bean之间的属性是怎么维护的

    spring对象[bean]之间的属性是通过什么维护的: 1.构造方法:标签:constructor-arg 2.set方法:标签:property <beans xmlns="htt ...

  4. Perl关联数组用法集锦

    本文和大家重点讨论一下Perl关联数组的概念,创建Perl关联数组,从数组变量复制到Perl关联数组,元素的增删,用Perl关联数组循环等内容,相信通过本文的学习你对Perl关联数组的用法一定会有深刻 ...

  5. ros 节点关闭后重启

    加入参数 respawn="true"

  6. c代码,输出i,j,k互不相同的三位数

    #include <stdio.h> int main() { int i,j,k; printf("\n"); for(i=1;i<5;i++){ for(j= ...

  7. [calss*="col-"]匹配类名中包含col-的类名,^以col-开头,$以col-结尾

    [class*= col-]  代表包含  col-  的类名 , 例 col-md-4 ,demo-col-2(这个是虚构的)等都可以匹配到. [class^=col-]  代表 以 col- 开头 ...

  8. 结合CRT与欧拉定理高阶幂求余

  9. Vue技巧

    转载:https://segmentfault.com/a/1190000014085613?utm_source=channel-hottest 对自己有用,做个笔记,有兴趣可以去以上地址去看. 第 ...

  10. 滑动验证 和滑动图片验证JS

    滑动验证 先放效果图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...