Node概述

node是单线程,某一个任务的后续操作,往往采用回调函数(callback)的形式进行定义。Node约定,如果某个函数需要回调函数作为参数,则回调函数是最后一个参数。另外,回调函数本身的第一个参数,约定为上一步传入的错误对象。如果没有发生错误,回调函数的第一个参数就传入null。

全局对象和全局变量

  • 全局对象:global,process(node所属当前进程),console
  • 全局函数:setTimeout(),clearTimeout(),setInterval(),clearInterval(),require(用于加载模块),Buffer(用于操作二进制数据)
  • 全局变量:__filename(当前运行的脚本文件名),__dirname(当前运行的脚本所在的目录)
  • 伪全局变量(模块内部):module, module.exports, exports

模块化结构

模块即文件

  • 加载模块:require("moudle")
  • 输出模块:module.exports
  • 核心模块:http,url,fs,querystring,child_process,util,path,crypto

异常处理

Node是单线程运行环境,一旦抛出的异常没有被捕获,就会引起整个进程的崩溃。所以,Node的异常处理对于保证系统的稳定运行非常重要。

  • 使用throw语句抛出一个错误对象,即抛出异常。
    try…catch结构,但是,这个结构无法捕获异步运行的代码抛出的异常。因为异步操作会在下一轮事件循环中抛出异常,但是此时catch语句已经运行结束。解决方案:用setTimeout,将错误捕获放在异步操作中。
  • 回调函数
    Node采用的方法,是将错误对象作为第一个参数,传入回调函数。这样就避免了捕获代码与发生错误的代码不在同一个时间段的问题。
  • EventEmitter接口的error事件
    如果没有对error事件部署监听函数,会导致整个应用程序崩溃。

其他异常处理方法

  • uncaughtException事件
    只要给uncaughtException配置了回调,Node进程不会异常退出,但异常发生的上下文已经丢失,无法给出异常发生的详细信息。而且,异常可能导致Node不能正常进行内存回收,出现内存泄露。所以,当uncaughtException触发后,最好记录错误日志,然后结束Node进程。
  • unhandledRejection事件
    iojs有一个unhandledRejection事件,用来监听没有捕获的Promise对象的rejected状态。
 process.on('unhandledRejection', function (err, p) {
  console.error(err.stack);
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容