配置多种场景

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

场景的种类

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

  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这个模块读取配置,通过不同的配置来做不同的事情, 觉得有用的大神关注相互关注下呗。

最新文章

  1. WebView解析
  2. spring boot 添加jsp支持注意事项
  3. Apache 打开网页的时候等待时间过长的解决方案
  4. 【Python】Python3中的str和bytes
  5. Quartz集群配置
  6. dbcp2和dbcp 1.4在API层面的差异
  7. AWS Python SDK boto3中的基本概念与使用方法
  8. sqlserver2005重新安装(安装汇编错误,安装程序无法连接到数据库服务进行服务配置)
  9. Java的基本语法
  10. hdu1428之dfs+spfa
  11. 网络&协议目录
  12. 前端整理——css部分
  13. C# 之 下载EXCEL文件,自动用迅雷下载aspx
  14. 记一次ubuntuyu源码安装node.js
  15. MySQL 中的三中循环 while loop repeat 的基本用法
  16. Alpha阶段_团队分数分配
  17. logback.xml 模板
  18. Android实验一(在Android Studio中创建项目和模拟器)
  19. disable某种警告
  20. [UE4]使用PlayerController获取鼠标点击时的坐标

热门文章

  1. React绑定事件动态化的实现方法
  2. 设置本地虚拟域名windows+apache
  3. [qt]qstring和string中文支持转换问题
  4. [osgearth][原]仿照谷歌,修改oe漫游器中focal(视角切换)功能
  5. linux c/c++ 获取文件大小
  6. telnet作用和 命令使用方法详解
  7. jenkins之从0到1利用Git和Ant插件打war包并自动部署到tomcat(第四话):把war包远程部署到tomcat
  8. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建子网格
  9. rabbimq
  10. python基础之正则表达式 re模块