ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 基本模块 因为Node.js是运行在服务区端的JavaScript环境,服务器程序和浏览器程序相比,最大的特点是没有浏览器的安全限制了,而且,服务器程序必须能接收网络请求,读写文件,处理二进制内容,所以,Node.js内置的常用模块就是为了实现基本的服务器功能。这些模块在浏览器环境中是无法被执行的,因为它们的底层代码是用C/C++在Node.js运行环境中实现的。 ## global 在前面的JavaScript课程中,我们已经知道,JavaScript有且仅有一个全局对象,在浏览器中,叫`window`对象。而在Node.js环境中,也有唯一的全局对象,但不叫`window`,而叫`global`,这个对象的属性和方法也和浏览器环境的`window`不同。进入Node.js交互环境,可以直接输入: ``` > global.console Console { log: [Function: bound ], info: [Function: bound ], warn: [Function: bound ], error: [Function: bound ], dir: [Function: bound ], time: [Function: bound ], timeEnd: [Function: bound ], trace: [Function: bound trace], assert: [Function: bound ], Console: [Function: Console] } ``` ## process `process`也是Node.js提供的一个对象,它代表当前Node.js进程。通过`process`对象可以拿到许多有用信息: ``` > process === global.process; true > process.version; 'v5.2.0' > process.platform; 'darwin' > process.arch; 'x64' > process.cwd(); //返回当前工作目录 '/Users/michael' > process.chdir('/private/tmp'); // 切换当前工作目录 undefined > process.cwd(); '/private/tmp' ``` JavaScript程序是由事件驱动执行的单线程模型,Node.js也不例外。Node.js不断执行响应事件的JavaScript函数,直到没有任何响应事件的函数可以执行时,Node.js就退出了。 如果我们想要在下一次事件响应中执行代码,可以调用`process.nextTick()`: ``` // test.js // process.nextTick()将在下一轮事件循环中调用: process.nextTick(function () { console.log('nextTick callback!'); }); console.log('nextTick was set!'); ``` 用Node执行上面的代码`node test.js`,你会看到,打印输出是: ``` nextTick was set! nextTick callback! ``` 这说明传入`process.nextTick()`的函数不是立刻执行,而是要等到下一次事件循环。 Node.js进程本身的事件就由`process`对象来处理。如果我们响应`exit`事件,就可以在程序即将退出时执行某个回调函数: ``` // 程序即将退出时的回调函数: process.on('exit', function (code) { console.log('about to exit with code: ' + code); }); ``` ## 判断JavaScript执行环境 有很多JavaScript代码既能在浏览器中执行,也能在Node环境执行,但有些时候,程序本身需要判断自己到底是在什么环境下执行的,常用的方式就是根据浏览器和Node环境提供的全局变量名称来判断: ``` if (typeof(window) === 'undefined') { console.log('node.js'); } else { console.log('browser'); } ``` 后面,我们将介绍Node.js的常用内置模块。 ## 参考源码 [gl.js](https://github.com/michaelliao/learn-javascript/blob/master/samples/node/global/gl.js)