【Express.js】全局变量与配置文件

这篇具有很好参考价值的文章主要介绍了【Express.js】全局变量与配置文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

全局变量与配置文件

通常我们会将一些项目的配置信息写在一个文件内,然后读入内存并使用。在 express 中使用全局变量有多种方案,我们一起看看有哪些常用的方案

准备工作

拷贝第一节的HelloWorld项目

准备一个Resp.js模块:

module.exports = {
    Ok: (...args)=>{
        return {
            code: 200,
            msg: args[0]?args[0]:"Ok",
            data: args[1]?args[1]:null
        }
    }
}

global

global对象中挂载我们需要全局共享的量,比如我们想要挂载一个全局的config作为整个express应用的配置,就在项目的唯一入口文件(如: index.js, app.js等)的最顶上(优先于任何模块)设置一次:

// index.js
global.config = {
    appname: "GlobalVar"
}
/** 更简洁的写法,隐变量,首次被执行到后,会自动挂载到全局
config = {
    appname: "GlobalVar"
}
*/
//创建app应用...

这样我们就可以在其它任何地方调用config,比如新建一个router.js挂载到express应用上去

// router.js
const routes = require('express').Router();
routes.get('/global', (req, res, next)=>{
    res.send(Resp.Ok("global中的全局变量", {"appname":config.appname}));
});

module.exports = routes;

// index.js
app.use(routes);

如果我们有很多需要全局共享的配置,挤在index.js的上方多少有点不雅观,那我们可以把它们写在一个文件里,然后在index.js最顶上引入一下

// global.js
global.config = {
    appname: "GlobalVar"
}

// index.js
require('./global');

**注意:**由于global中的变量是可以直接以变量名xxx调用的,无需global.xxx,如果变量名设置的比较普通,就比如上面的config,甚至更简单的a之类的,很可能跟其它模块中定义的临时变量冲突,造成变量污染,因此在global上挂载变量时取名一定要特殊点,比如:之前的config替换为__config

global.__config = {
    appname: "GlobalVar"
}

优点:

  • 调用很便捷

缺点:

  • 可能变量污染
  • 没有代码提示,不心安

module

自定义一个module,存放一些变量,在需要的地方进行引入
比如:我们自建一个config.js

// config.js
module.exports = {
    appname: "GlobalVar"
}

在router.js中引入config.js

// router.js
const CONFIG = require('./config');

routes.get('/module', (req, res, next)=>{
    res.send(Resp.Ok("config模块当作全局变量", {"appname":CONFIG.appname}));
});

优点:

  • 能有代码提示
  • 无变量污染

缺点:

  • 每次都要引入,比较麻烦

app.set

在 express 的应用设置表中设置应用内的全局变量:

// index.js
app.set("appname", "GlobalVar");

在其它地方调用app,如挂载在app上的router:

// router.js
routes.get('/app', (req, res, next)=>{
    res.send(Resp.Ok("app中的'全局'变量", {"appname":req.app.get("appname")}));
});

在挂载在app下的子应用中,调用父app中的设置,当某字段在子应用中没有设置时,会继承父应用中的字段

//subapp.js
const app = require('express')();
const Resp = require('./Resp');
//当子应用没有设置时,会继承父应用中设置的字段
// app.set('appname', "subapp");
app.all('/', (req, res, next) => {
    res.send(Resp.Ok("子应用获取父应用中的全局变量", {
        appname: req.app.get("appname")
    }));
})

module.exports = app;

//index.js
const subapp = require('./subapp');
app.use('/subapp',subapp);

优点:

  • 能有代码提示

process.env

在进程的环境变量中挂载全局变量:

//index.js
process.env.appname = "GlobalVar";

在其它地方调用process.env.appname

// subapp2.js
const app = require('express')();
const Resp = require('./Resp');

app.all('/', (req, res, next) => {
    // console.log(app.settings.env);
    res.send(Resp.Ok("在process.env上挂载全局变量", {
        appname: process.env.appname
    }));
})

module.exports = app;

//index.js
const subapp2 = require('./subapp2');
app.use('/process.env',subapp2);

缺点:

  • 没有代码提示,不心安

json

以上的方案都是将配置信息写在js文件中的,对于一个正规的项目来说多少有点儿戏,毕竟写在js中的变量是很容易就能被改变的。绝大多数时候,配置信息是需要变化也不允许变化的,我们只需要静态的信息即可。在Js项目中,经常用json文件作为静态配置文件。

新建一个config.json文件:

{
	"appname": "GlobalVar"
}

在我们的router中新加一条测试一下,不管你在哪里require,在首次被require之后,修改json文件内容将不会再产生影响

routes.get('/json', (req, res, next)=>{
    let configJson = require('./config.json');
    res.send(Resp.Ok("json静态配置文件", {"appname":configJson.appname}));
});

json文件不支持注释,如果想要注释,要么曲线救国(加与被备注键相关的键值对),要么使用Json5规范

npm install json5

新建一个config.json5文件:

{
    "appname": "GlobalVar"  //应用名
}

接着在项目的入口文件中引入register,会挂载到全局:

require('json5/lib/register');

之后require就可以解析json5文件了:

routes.get('/json5', (req, res, next)=>{
    let configJson5 = require('./config.json5');
    res.send(Resp.Ok("json5静态配置文件", {"appname":configJson5.appname}));
});

yaml

相比.json文件,.yaml(或.yml)文件是更加现在的配置文件,json文件有着严格的格式要求,yaml(yml)书写起来则更加自然
新建一个config.yaml文件:

# 应用名
appname: GlobalVar  # 应用名

在nodeJs中读取yaml需要借助fsjs-yaml

npm install fs
npm install js-yaml

把fs挂载到全局即可(之前的global.js),一般情况下也不会取fs这样的局部变量名,如果需要频繁的操作文件,挂载到全局后会方便很多:

global.fs = require('fs');

在router.js中引入js-yaml并新建一个测试路由:

const yaml = require('js-yaml');

routes.get('/yaml', (req, res, next)=>{
    /*Object */
    let configYaml = yaml.load(fs.readFileSync('./config.yaml'));
    res.send(Resp.Ok("yaml动态配置文件", {"appname":configYaml.appname}));
});

由于是通过fs读取yaml文件的,因此在改变yaml文件中的内容后,访问路由的结果也会变


本文总共介绍了6种方案,在项目具体采用哪种并没有绝对的说法,因地制宜即可。文章来源地址https://www.toymoban.com/news/detail-587786.html

下一节-错误分类和日志分级

到了这里,关于【Express.js】全局变量与配置文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 原生JS设置并获取全局变量

    原生JS设置并获取全局变量,干货版。 一共有且只有以下五种方式 1、通过window对象设置和获取全局变量; 通过window对象设置和获取全局变量。window对象是所有全局变量的拥有者,它是JavaScript的最顶层对象。我们可以通过window对象来设置和获取全局变量,例如: 2、使用ES6新

    2024年02月08日
    浏览(9)
  • 关于css中设置变量用于全局Css或者Js中使用

    一、配置变量css文件 src/styles/variables.scss 二、在组件中使用变量

    2024年02月07日
    浏览(11)
  • nodejs下载安装以及配置全局变量

    nodejs下载安装以及配置全局变量

    一、下载 官网下载: 1、https://nodejs.org/dist/v10.16.3/node-v10.16.3-win-x64.zip 2、http://nodejs.cn/download/ 注:根据自己的项目对应电的nodejs版本去下载对应的,否则肯出现项目无法运行的情况 二、安装 无脑下一步即可,安装完成后nodejs会自行配置全局变量 注:根据自己需求更换安装的

    2023年04月08日
    浏览(13)
  • Postman 全局配置接口路径变量等

    Postman 全局配置接口路径变量等

    这里主要是介绍通过配置postman接口测试工具,简化每次新增模块等接口时修改url的繁琐过程,方便以后查阅!!! 1、新增测试环境 新增测试环境 2、接口集合设置变量值 选中新增的测试环境,在操作后续步骤; 代码 3、文件夹设置模块路径前缀 一个文件夹类似一个control

    2024年02月05日
    浏览(11)
  • postman接口测试之Postman配置环境变量和全局变量

    目录 前言 环境变量 全局变量  总结: 我们在测试的过程中,遇到最多的问题也可以是环境的问题了吧,今天开发用了这个测试环境,明天又换了另一个测试环境,这样对于我们测试非常的麻烦,特别最接口的时候需要来回的输入环境地址比较麻烦,今天我们看看强大的工具

    2024年02月07日
    浏览(16)
  • Python中跨越多个文件使用全局变量

    Python中跨越多个文件使用全局变量

    这个琐碎的指南是关于在 Python 中跨多个文件使用全局变量。但是在进入主题之前,让我们简单地看看全局变量和它们在多个文件中的用途。 Python 中的全局变量 全局变量是不属于函数范围的变量,可以在整个程序中使用。这表明全局变量也可以在函数体内部或外部使用。 让

    2024年02月09日
    浏览(10)
  • C++ 全局变量的跨文件使用

    在写C++工程文件的时候,往往会用到一些所有类都使用的数据,比如数据文件等,一种写法是写成静态类,调用数据时使用类名加属性名的形式,另一种时写成全局变量的形式。 C++工程组织结构是按照xx.h文件中写函数/类的声明,xx.cpp文件中写函数的定义,所以对于全局变量

    2024年02月04日
    浏览(8)
  • 【python】python跨文件使用全局变量

    有多个py文件同时使用一个全局变量时,那应该如何使跨文件,用这个全局变量呢? (关注“测试开发自动化” 弓中皓,查看历史文章,更详细的解析说明) file1.py代码如下: file2.py代码如下: 很多同学认为应该打印92,即:1+100-10 = 91。但是实际只打印了-9,也就说明,fi

    2024年02月03日
    浏览(6)
  • vue项目根据不同环境动态配置接口请求ip及全局变量(vue环境变量配置)

    vue项目根据不同环境动态配置接口请求ip及全局变量(vue环境变量配置)

    在项目的开发过程中,我们常常会遇到根据不同的环境需要切换不同的ip的问题,例如在项目部署到测试服时需要将接口请求ip替换成测试服的ip,部署到正式服时又需要将接口请求ip替换成正式服对应的ip,有些公司还有预发环境等,这样在每次部署不同环境的项目前都需要先手

    2024年02月02日
    浏览(17)
  • node安装后的全局环境变量配置

    node安装后的全局环境变量配置

    安装node时,位置最好不要装在c盘,这里,我在D盘下创建了文件夹\\\"node\\\",安装地址选择在该文件夹下 一直next,直到安装结束,打开\\\"node\\\"文件夹,安装完后,里面的配置文件和文件夹如下图所示: 打开黑窗口,输入dos命令,“node -v” ,测试node有没有安装成功,出现版本号即

    2024年02月09日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包