[NODE之13]Error

我会带着你远行 2022-10-01 04:54 194阅读 0赞
  1. /**
  2. * Created by liyanq on 17/3/26.
  3. * Node.js 中运行的应用程序一般会遇到以下四类错误:
  4. * 1,标准的 JavaScript 错误:
  5. * <EvalError> : 当调用 eval() 失败时抛出。
  6. * <SyntaxError> : 当 JavaScript 语法错误时抛出。
  7. * <RangeError> : 当一个值不在预期范围内时抛出。
  8. * <ReferenceError> : 当使用未定义的变量时抛出。
  9. * <TypeError> : 当传入错误类型的参数时抛出。
  10. * <URIError> : 当一个全局的 URI 处理函数被误用时抛出。
  11. * 2,由底层操作系的触发的系统错误,例如试图打开一个不存在的文件、试图向一个已关闭的 socket 发送数据等。
  12. * 3,由应用程序代码触发的用户自定义的错误。
  13. * 4,断言错误是错误的一个特殊的类,每当 Node.js 检测到一个不应该发生的异常逻辑时会触发。 这类错误通常由 assert 模块触发。
  14. * 所有 Node.js 引起的 JavaScript 和系统错误都是继承自或实例化自标准的 JavaScript 的 <Error> 类,
  15. * 且保证至少提供类中的可用的属性。
  16. */
  17. const EventEmitter = require("events");
  18. const fs = require('fs');
  19. /*错误的冒泡和捕获
  20. * JavaScript 的 throw 机制的任何使用都会引起异常,异常必须使用 try / catch 处理,否则 Node.js 进程会立即退出。*/
  21. class myEventEmitter extends EventEmitter {
  22. constructor() {
  23. super();
  24. }
  25. showErr() {
  26. this.emit("error", "我是一个myEventEmitter的异常信息");
  27. // throw new Error("我是一个myEventEmitter的异常信息");//这样写直接崩溃~
  28. }
  29. }
  30. const eventObj = new myEventEmitter();
  31. eventObj.on("error", function (e) {//如果不添加error的处理,程序将崩溃~
  32. console.log("我处理了异常,异常内容:" + e);
  33. });
  34. eventObj.showErr();
  35. /*Node.js 风格的回调
  36. * 觉得官方例子不太好,一个抛异常,一个没抛,怎么比?总结一句话,try..catch无法捕捉到异步的异常操作*/
  37. try {
  38. fs.readFile('/some/file/that/does-not-exist', (err, data) => {
  39. if (err) {// 假设的错误:在这里抛出
  40. console.log(err.path) ;
  41. }
  42. });
  43. } catch (err) {// 这不会捕获到抛出!
  44. console.log(err);
  45. }
  46. /*Error 类
  47. * 所有由 Node.js 产生的错误,包括所有系统的和 JavaScript 的错误都实例化自或继承自 Error 类。
  48. *
  49. * Error.captureStackTrace(targetObject[, constructorOpt])
  50. * Error.stackTraceLimit
  51. * 这两个类方法没看明白怎么用,以后再说吧~*/
  52. /*error.stack
  53. * error.stack 属性是一个字符串,描述代码中 Error 被实例化的位置。
  54. * */
  55. /*RangeError 类
  56. * Error 的一个子类,表明一个函数的一个给定的参数的值不在可接受的集合或范围内;
  57. * 无论是一个数字范围还是给定函数参数的选项的集合。
  58. * ReferenceError 类
  59. * Error 的一个子类,表明试图访问一个未定义的变量。 这些错误通常表明代码有拼写错误或程序已损坏。
  60. * SyntaxError 类
  61. * Error 的一个子类,表明程序不是有效的 JavaScript 代码。 这些错误是代码执行的结果产生和传播的。
  62. * 代码执行可能产生自 eval、Function、require 或 vm。 这些错误几乎都表明程序已损坏。
  63. * TypeError 类
  64. * Error 的一个子类,表明提供的参数不是一个被允许的类型。*/
  65. /*Error的对象属性
  66. * error.code<String>:属性是一个表示错误码的字符串,总是 E 带上一串大写字母
  67. * error.errno<String> | <Number>: 如果返回一个数值,则数值是一个负数,对应 libuv 错误处理 中定义的错误码。
  68. * error.syscall<String>:error.syscall 属性是一个字符串,描述失败的 系统调用。下面的例子返回"open"
  69. * error.path<String>:下面例子返回:/some/file/that/does-not-exist
  70. * error.address<String>:针对网络
  71. * error.port<Number>:针对网络*/
  72. /*错误对象的内容
  73. * { Error: ENOENT: no such file or directory, open '/some/file/that/does-not-exist'
  74. at Error (native)
  75. errno: -2,
  76. code: 'ENOENT',
  77. syscall: 'open',
  78. path: '/some/file/that/does-not-exist' }
  79. */
  80. /*常见的系统错误
  81. * 1,EACCES (拒绝访问): 试图以被一个文件的访问权限禁止的方式访问一个文件。
  82. * 2,EADDRINUSE (地址已被使用): 试图绑定一个服务器(net、http 或 https)到本地地址,
  83. * 但因另一个本地系统的服务器已占用了该地址而导致失败。
  84. * 3,ECONNREFUSED (连接被拒绝): 无法连接,因为目标机器积极拒绝。 这通常是因为试图连接到外部主机上的废弃的服务。
  85. * 4,ECONNRESET (连接被重置): 一个连接被强行关闭。 这通常是因为连接到远程 socket 超时或重启。
  86. * 常发生于 http 和 net 模块。
  87. * 5,EEXIST (文件已存在): 一个操作的目标文件已存在,而要求目标不存在。
  88. * 6,EISDIR (是一个目录): 一个操作要求一个文件,但给定的路径是一个目录。
  89. * 7,EMFILE (系统打开了太多文件): 已达到系统文件描述符允许的最大数量,且描述符的请求不能被满足直到至少关闭其中一个。
  90. * 当一次并行打开多个文件时会发生这个错误,尤其是在进程的文件描述限制数量较低的操作系统(如 OS X)。
  91. * 要解决这个限制,可在运行 Node.js 进程的同一 shell 中运行 ulimit -n 2048。
  92. * 8,ENOENT (无此文件或目录): 通常是由 fs 操作引起的,表明指定的路径不存在,即给定的路径找不到文件或目录。
  93. * 9,ENOTDIR (不是一个目录): 给定的路径虽然存在,但不是一个目录。 通常是由 fs.readdir 引起的。
  94. * 10,ENOTEMPTY (目录非空): 一个操作的目标是一个非空的目录,而要求的是一个空目录。 通常是由 fs.unlink 引起的。
  95. * 11,EPERM (操作不被允许): 试图执行一个需要更高权限的操作。
  96. * 12,EPIPE (管道损坏): 写入一个管道、socket 或 FIFO 时没有进程读取数据。 常见于 net 和 http 层,表明远端要写入的流已被关闭。
  97. * 13,ETIMEDOUT (操作超时): 一个连接或发送的请求失败,因为连接方在一段时间后没有做出合适的响应。
  98. * 常见于 http 或 net。 往往标志着 socket.end() 没有被正确地调用。*/

发表评论

表情:
评论列表 (有 0 条评论,194人围观)

还没有评论,来说两句吧...

相关阅读