node.js项目多环境配置
配置多种场景
我们的系统是要在不同的环境下运行的,不同的环境可能是不同的端口号,不同的数据库地址,数据库用户和密码,
并且可能有的需要自动重启有的不需要自动重启。
我们在有一个配置的时候是无法满足这么多的场景的,所以我们要为不同的场景做额外配置
场景的种类
场景的种类一般就以下几种
- 开发场景
- 真实场景
- 测试场景
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项目多环境配置的更多相关文章
- Node.js安装及环境配置之Windows篇
Node.js安装及环境配置之Windows篇 一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1. ...
- Node.js安装及环境配置之Windows篇(转:https://www.cnblogs.com/zhouyu2017/p/6485265.html)
Node.js安装及环境配置之Windows篇(原文地址:https://www.cnblogs.com/zhouyu2017/p/6485265.html) 一.安装环境 1.本机系统:Wind ...
- Node.js安装及环境配置 for winer
Node.js安装及环境for Windows 一.安装环境 1.本机系统:Windows 10 Pro(64位) 2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下 ...
- Node.js 安装及环境配置之 Windows 篇
一.安装环境 1.本机系统:Windows 10 企业版(64位)2.Node.js:node-v8.9.4-x64.msi(64位) 二.安装Node.js步骤 1.下载对应自己系统对应的 Node ...
- Node.js 安装及环境配置 以及google浏览器安装插件并使用
一.安装环境 1.本机系统:Windows 10 企业版(64位)2.Node.js:node-v10.16.0-x64.msi(64位) 二.安装Node.js步骤 1.下载对应自己系统对应的 No ...
- node.js安装及环境配置超详细教程【Windows系统安装包方式】
文章目录 Step1:下载安装包 Step2:安装程序 Step3:查看 Step4:环境配置 最后补充: Step1:下载安装包 https://nodejs.org/zh-cn/download/ ...
- windows系统下安装 node.js (node.js安装及环境配置)
node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node. ...
- Node.js安装及环境配置之Windows篇---完美,win7已测
一.安装环境 1.本机系统:Windows 10 Pro(64位) (楼主win7,完美通过)2.Node.js:v6.9.2LTS(64位) (楼主版本2018-11-01下载的最新版本) 二.安装 ...
- Windows下node.js安装及环境配置
1. 安装 官网下载node.js的安装版,一路next,中间可以自定义安装路径 完成后安装目录内容如下 cmd下检查是否安装成功 新版Node.js已自带npm,所以安装Node.js时会一起安装, ...
随机推荐
- HDU 5726 GCD(RMQ+二分)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...
- System.arraycopy和arrays.copyOf
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 这 ...
- Qt532界面.ZC测试
ZC:Delphi中只要随便拖几个控件,设置一下属性就OK了.但是,Qt中 貌似没有 方便的方式来做这个... ZC:目前的解决方案是:Qt中 拖几个控件,然后点 工具条里面的 "栅格布局( ...
- Java之——利用Comparator接口对多个排序条件进行处理
转载自:http://blog.csdn.net/l1028386804/article/details/56513205 膜拜大神··· 一.需求 假设现在有个如此的需求:需要对一个这样的雇员列表进 ...
- 《UnityShader入门精要》学习笔记之渲染流水线
第一种分类方式: 图形管道(如下7步): 顶点数据 : 由3D模型传递的三角形网格 顶点着色 : 编写CG程序对各个顶点进行着色 生成几何图元 : 连接特定的顶点生成几何图元,例如连接三个顶点生成一个 ...
- LFU Cache
2018-11-06 20:06:04 LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”. ...
- 下一个更大的数 Next Greater Element
2018-09-24 21:52:38 一.Next Greater Element I 问题描述: 问题求解: 本题只需要将nums2中元素的下一个更大的数通过map保存下来,然后再遍历一遍nums ...
- nodejs模拟http发送请求
首先需要安装模块request,然后代码如下: //模拟发送http请求 var request = require("request"); //get请求 request('ht ...
- thinkphp5的Auth权限认证实战
thinkphp5的Auth权限认证实战 一.总结 一句话总结:基于角色的权限管理(真正做一遍,就会发现很简单,不然一直都是半懂不懂的) 角色 权限 真正做一遍,就会发现很简单,不然一直都是半懂不懂的 ...
- English trip V1 - B 22. Here,There and Everywhere 无处不在 Teacher:Taylor Key: Be + Ving
In this lesson you will learn to describe what you see. 课上内容(Lesson) # How's the weather today? 今天的天 ...