node.js项目改进之环境配置
2017-04-02 21:20
567 查看
配置多种场景
我们的系统是要在不同的环境下运行的,不同的环境可能是不同的端口号,不同的数据库地址,数据库用户和密码,并且可能有的需要自动重启有的不需要自动重启。
我们在有一个配置的时候是无法满足这么多的场景的,所以我们要为不同的场景做额外配置
场景的种类
场景的种类一般就以下几种开发场景
真实场景
测试场景
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
'use strict'; var development=require('../config/development'); var production=require('../config/production'); var test=require('../config/test'); /** * 判断当前指示当前环境的常量返回对应配置 * 默认返回开发环境的配置 */ function config(){ switch(process.env.NODE_ENV){ case 'development':return development;break; case 'production':return production;break; case 'test':return test;break; default:return development; } } module.exports=config();
在用的到的地方调用config.js
在我们的项目没有开始写之前用到配置的地方主要就是bin/www文件了。修改www文件
我现在的www文件是这样的#!/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(v 4000 al) { 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这个模块读取配置,通过不同的配置来做不同的事情。最终项目地址:https://github.com/jijuxie/koa2_all.git
相关文章推荐
- 详解使用Typescript开发node.js项目(简单的环境配置)
- mac下配置Node.js开发环境、express安装、创建项目
- 使用Typescript开发node.js项目——简单的环境配置
- 自学Node.js: WebStorm+Node.js开发环境的配置
- Windows环境下的NodeJS+NPM+Bower安装配置步骤
- Windows环境下的NodeJS+NPM+Bower安装配置步骤
- Notepad++ 配置 Node.js 开发环境
- 自学Node.js: WebStorm+Node.js开发环境的配置
- 自学Node.js: WebStorm+Node.js开发环境的配置
- Ubuntu下 Cesiumjs 调试环境配置 (著名的三维虚拟地球开源项目)
- 配置Nginx SSL Node.js环境详细指南
- nodejs+phonegap+ionic环境搭建并创建项目
- Nodejs+Grunt配置SASS项目自动编译
- Windows下node.js+express安装配置教程、构建JavaScript的Web开发环境
- 配置Nginx SSL Node.js环境详细指南
- Node.js开发指南之一:基本概念与开发环境的配置
- Notepad++ 配置 Node.js 开发环境
- WebStorm中Node.js项目配置教程(1)——创建项目
- Windows环境下的NodeJS+NPM+Bower安装配置步骤
- window7 配置node.js 和coffeescript环境