• node.js使用`config-lite`配置环境变量


    前言


    本篇博文背景:config-lite版本=》3.0.0,,node.js版本=》14.17.0,,cross-env版本=》7.0.3
    最近在使用node.js开发服务端项目,把自己配置环境变量的过程记录下来,方便学习。

    配置环境变量需要cross-envconfig-lite配合使用

    第一步:安装config-lite

    config-lite传送门config-lite官网

    npm install config-lite --save
    
    • 1

    第二步:项目根目录下创建config文件夹,里边新建default.js,test.js,uat.js,product.js

    基本内容如下,具体的可参考项目的配置而定,这里以不同环境的端口变量不同为例
    default.js内容

    // config-lite模块配置文件
    // 这里我用的是mongodb连接数据库
    module.exports = {
        host: '0.0.0.0',
        port: 3838,
        dataBaseUrl: 'mongodb://localhost:27017/admin',
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    test.js内容

    module.exports = {
        port:3939,
    }
    
    • 1
    • 2
    • 3

    第三步:再启动页或者你需要的页面引入配置模块

    index.js

    var express = require('express');
    // 必须安装babel,babel-preset-env---node才能支持es6的导入模块import
    //连接mongodb数据库
    import db from './mongodb/index.js'
    // 由于项目中使用了hotnode导致chalk失效,所以建议使用nodemon
    import chalk from 'chalk'; //打印日志多彩化
    import path from 'path'; //node中处理文件路径的模块
    import cookieParser  from 'cookie-parser';     //在浏览器中设置cookie 给响应头(Response headers)设置cookie
    import routerFace from './routes/index.js';
    //配置模块   config-lite必须如此引入否则无效
    var config = require('config-lite')({
        filename: 'default.js',
        config_basedir: __dirname,
        config_dir: 'config'
    });
    var app = express();
    /**
     * 添加跨域请求头,解决跨域办法的一种,后台添加请求头
     */
    app.all('*', function (req, res, next) {
        if (req.header("Origin")) {
            res.setHeader("Access-Control-Allow-Origin", req.header("Origin"));
        } else {
            res.setHeader("Access-Control-Allow-Origin", "*");
        }
        res.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
        res.setHeader("Access-Control-Allow-Credentials", "true");
        res.setHeader("Access-Control-Allow-Methods", "OPTION,POST,GET");
        next();
    });
    // 用于接收post参数  使接口认识req.body  
    // 解析application/x-www-form-urlencoded
    app.use(express.json());
    app.use(express.urlencoded({
    	extended: false
    }));
    //这里有一个区别就是看是否使用签名
    app.use(cookieParser());
    //设置静态资源路径和文件 
    app.use(express.static(path.join(__dirname, 'www'))); 
    /* GET home page. */
    app.get('/', function (req, res, next) {
        res.send('欢迎访问小郝node服务接口')
    });
    // 引入所有的接口(路由)文件
    routerFace(app);
    // 处理接口服务中的404
    app.use((req, res, next) => {
    	res.sendStatus(404);   //发送状态码使用sendStatus
    })
    // node监听启动服务端口
    app.listen(config.port, config.host, function () {
        console.log(chalk.green('Server start on ' + config.host + ':' + config.port));
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    第四步:安装cross-env

    npm install cross-env --save--dev
    
    • 1

    第五步:package.json配置启动命令

    这里要特别说明,如果程序以npm run testStart启动,则config-lite会依次降级查找 config/test.js、config/test.json、config/test.node、config/test.yml、config/test.yaml 并合并 default 配置;

      "scripts": {
        "start": "hotnode enter.js",
        "testStart": "cross-env NODE_ENV=test hotnode enter.js",
        "uatStart": "cross-env NODE_ENV=uat hotnode enter.js",
        "server": "cross-env NODE_ENV=uat pm2 start enter.js --name 'haoyanfeng'",
        "stop": "pm2 stop enter.js --name 'haoyanfeng'",
        "delete": "pm2 delete enter.js --name 'haoyanfeng'",
        "list": "pm2 list",
        "apidoc": "apidoc -i routes/ -o doc/",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    第六步:结束语

    这时候就可以完美使用命令区分不同环境了,还有一些不足的地方,后续学习到会更新。

  • 相关阅读:
    Python之Xlwings操作excel
    python的opencv操作记录(五) - 空间域与频域转换
    「项目管理」如何做好项目进度管理计划?
    特征预处理
    【电源专题】什么是AC/DC转换器
    Mac下Charles踩坑记录
    指针和数组笔试题解析
    cmake 学习使用笔记(二)库的生成与使用
    数据类型【MySQL】
    R语言计算代码的运行时间:使用tictoc包计算代码的运行时间长短、将toc的结果赋值值变量、可以获取详细信息(开始时间、结束时间、tic内容等)
  • 原文地址:https://blog.csdn.net/ww_5211314/article/details/126144155