66、JavaScript Node基本模块

因为Node.js是运行在服务区端的JavaScript环境,服务器程序和浏览器程序相比,最大的特点是没有浏览器的安全限制了,而且,服务器程序必须能接收网络请求,读写文件,处理二进制内容,所以,Node.js内置的常用模块就是为了实现基本的服务器功能。这些模块在浏览器环境中是无法被执行的,因为它们的底层代码是用C/C++在Node.js运行环境中实现的。

 

global

在前面的JavaScript课程中,我们已经知道,JavaScript有且仅有一个全局对象,在浏览器中,叫window对象。而在Node.js环境中,也有唯一的全局对象,但不叫window,而叫global,这个对象的属性和方法也和浏览器环境的window不同。进入Node.js交互环境,可以直接输入:

  1. > global.console
  2. Console {
  3. log: [Function: bound ],
  4. info: [Function: bound ],
  5. warn: [Function: bound ],
  6. error: [Function: bound ],
  7. dir: [Function: bound ],
  8. time: [Function: bound ],
  9. timeEnd: [Function: bound ],
  10. trace: [Function: bound trace],
  11. assert: [Function: bound ],
  12. Console: [Function: Console] }

 

process

process也是Node.js提供的一个对象,它代表当前Node.js进程。通过process对象可以拿到许多有用信息:

  1. > process === global.process;
  2. true
  3. > process.version;
  4. 'v5.2.0'
  5. > process.platform;
  6. 'darwin'
  7. > process.arch;
  8. 'x64'
  9. > process.cwd(); //返回当前工作目录
  10. '/Users/michael'
  11. > process.chdir('/private/tmp'); // 切换当前工作目录
  12. undefined
  13. > process.cwd();
  14. '/private/tmp'

 

JavaScript程序是由事件驱动执行的单线程模型,Node.js也不例外。Node.js不断执行响应事件的JavaScript函数,直到没有任何响应事件的函数可以执行时,Node.js就退出了。

 

如果我们想要在下一次事件响应中执行代码,可以调用process.nextTick()

  1. // test.js
  2. // process.nextTick()将在下一轮事件循环中调用:
  3. process.nextTick(function () {
  4. console.log('nextTick callback!');
  5. });
  6. console.log('nextTick was set!');

 

用Node执行上面的代码node test.js,你会看到,打印输出是:

nextTick was set!

nextTick callback!

这说明传入process.nextTick()的函数不是立刻执行,而是要等到下一次事件循环。

 

Node.js进程本身的事件就由process对象来处理。如果我们响应exit事件,就可以在程序即将退出时执行某个回调函数:

  1. // 程序即将退出时的回调函数:
  2. process.on('exit', function (code) {
  3. console.log('about to exit with code: ' + code);
  4. });

 

判断JavaScript执行环境

有很多JavaScript代码既能在浏览器中执行,也能在Node环境执行,但有些时候,程序本身需要判断自己到底是在什么环境下执行的,常用的方式就是根据浏览器和Node环境提供的全局变量名称来判断:

  1. if (typeof(window) === 'undefined') {
  2. console.log('node.js');
  3. else {
  4. console.log('browser');
  5. }

 

后面,我们将介绍Node.js的常用内置模块。

Node基本模块

 

参考源码 gl.js;如下:

  1. // global objects in nodejs:
  2. // current JavaScript file:
  3. console.log('current js file: ' + __filename);
  4. // current JavaScript file dir:
  5. console.log('current js dir: ' + __dirname);
  6. process.name = 'Sample Nodejs';
  7. // process.argv 存储了命令行参数:
  8. console.log('arguments: ' + JSON.stringify(process.argv));
  9. // process.cwd() 返回当前工作目录:
  10. console.log('cwd: ' + process.cwd());
  11. // 切换当前工作目录:
  12. var d = '/private/tmp';
  13. if (process.platform === 'win32') {
  14.     // 如果是Windows,切换到 C:\Windows\System32
  15.     d = 'C:\\Windows\\System32';
  16. }
  17. process.chdir(d);
  18. console.log('cwd: ' + process.cwd());
  19. // process.nextTick()将在下一轮事件循环中调用:
  20. process.nextTick(function () {
  21.     console.log('nextTick callback!');
  22. });
  23. console.log('nextTick was set!');
  24. // 程序即将退出时的回调函数:
  25. process.on('exit', function (code) {
  26.     console.log('about to exit with code: ' + code);
  27. });
付杰
PowerDesigner数据库设计与建模
  • ¥ 58元
  • 市场价:58元
Swoole从入门到精通(第一季)
  • ¥ 199.0元
  • 市场价:199.0元
vue.js视频教程:全新 Vue.js 2.6 核心技术合集
  • ¥ 69.0元
  • 市场价:69.0元
C++基础入门到进阶视频教程
  • ¥ 498.0元
  • 市场价:498.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: