Node.js自定义Global全局对象

 2015年11月20日    2986     声明


JavaScript中有全局对象,实际上,语言环境中所有可访问的对象都可以认为是其全局对象,如:NumberStringundefined等。在浏览器环境中,全局对象是Window对象,被写到Window对象中的对象都可以全局访问,如:DocumentLocation就是Window对象的子对象,可以全局访问。在Node.js中,有一个全局命名空间对象globalprocessconsoleBuffer等都是可以global的子对象,所以可以不需要require引用而直接使用。global对象是可读写的,你可以将自己常用的对象或模块等加入到到global,然后就可以全局访问。


1. 全局变量与块级变量

ECMAScript 6之前,JavaScript中没有块级变量(ECMAScript 6 中可以使用let定义块级变量),使用var声明的变量(非Function中声明),在浏览器环境就是一个全局变量。而在Node中则不同,var声明的变量是其顶级作用域,即:声明的模块中。

通过global对象,我们可以定义自己所需的全局变量。在Node.js中定义全局变量,在global对象中增加相应的属性即可。


2. 使用示例

例如,本站使用express框架,在项目的app.js文件中,增加了配置文件全局对象confighost全局对象,如下:

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

var config = require('../config');
var configDev = require('../configDev');
//config全局对象
global.config = process.env.NODE_ENV == "development" ? configDev : config;
//host全局对象
global.host = 'itbilu.com';

增加这两个全局对象,项目启动后,在其它模块中访问这两个对象会非常方便,无需require引用,就可以通过confighost全局变量名直接访问对象。

全局对象在实际工作当中非常有用,对一些访问率较高的,如:配置文件、国际化/本地化资源等,将其添加到全局对象后,使用和访问会非常的方便。