Node.js Error & Debug Leveling

3,808 views

Published on

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,808
On SlideShare
0
From Embeds
0
Number of Embeds
1,538
Actions
Shares
0
Downloads
7
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Node.js Error & Debug Leveling

  1. 1. Node.jsError and DebugLeveling2013-05-25Yosuke Kumakura / @kumatch
  2. 2. Yosuke Kumakura (kumatch)@kumatchFeedtailor inc.Current game: Path of Exile
  3. 3. Error and DebugLeveling
  4. 4. Leveling (game word)
  5. 5. Node で出現するエラーと戦ってレベル上げをしましょう。
  6. 6. Level 1$ node test.js-bash: node: command not found
  7. 7. Level 2$ pwd/path/to$ node test.jsmodule.js:340throw err;^Error: Cannot find module /path/to/test.jsat Function.Module._resolveFilename (module.js:338:15)at Function.Module._load (module.js:280:25)at Function.Module.runMain (module.js:497:10)at startup (node.js:119:16)at node.js:901:3
  8. 8. Level 3/path/to/test.js:3### コメント開始記号が間違い // が正解^SyntaxError: Unexpected token ILLEGALat Module._compile (module.js:439:25)....var level = 3;### コメント開始記号が間違い // が正解
  9. 9. Level 4/path/to/test.js:3var 54 = 42;^^SyntaxError: Unexpected numberat Module._compile (module.js:439:25)....var level = 4;var 54 = 42;
  10. 10. Level 5/path/to/test.js:3console.log( foo )^ReferenceError: foo is not definedat Object.<anonymous> (/path/to/test.js:1:75)....var level = 5;console.log( foo )
  11. 11. Level 6/path/to/test.js:3level();^TypeError: number is not a functionat Object.<anonymous> (/path/to/test.js:3:1)....var level = 6;level();
  12. 12. Level 7/path/to/test.js:4level.foo();^TypeError: Object 7 has no method fooat Object.<anonymous> (/path/to/test.js:4:7)....var level = 7;level.toString();level.foo();
  13. 13. catch the error
  14. 14. 同期処理と非同期処理
  15. 15. 非同期の形式は常に最後の引数として完了コールバックを受け取ります。引数として渡される完了コールバックはメソッドに依存しますが、最初の引数は常に例外のために予約されています。操作が成功で完了すると最初の引数は null または undefined となります。同期の形式では、全ての例外はすぐにスローされます。例外は try/catch で捕まえることも、そのまま通過させることもできます。File System (fs) モジュールDocument より抜粋
  16. 16. Level 8fs.js:684return binding.stat(pathModule._makeLong(path));^Error: ENOENT, no such file or directory nothing.txtat Object.fs.statSync (fs.js:684:18)at Object.<anonymous> (/path/to/test.js:3:15)....var fs = require(fs);var stat = fs.statSync(nothing.txt);
  17. 17. Level 9{ [Error: ENOENT,no such file or directory nothing.txt]errno: 34,code: ENOENT,path: invalid.txt,syscall: stat }var fs = require(fs);try {var stat = fs.statSync(nothing.txt);} catch (err) {console.log(err);}
  18. 18. Level 10Error: ENOENT, no such file or directory nothing.txtat Object.fs.statSync (fs.js:684:18)at Object.<anonymous> (/path/to/test.js:4:19)....var fs = require(fs);try {var stat = fs.statSync(nothing.txt);} catch (err) {console.log(err.stack);}
  19. 19. Level 11{ [Error: ENOENT, stat nothing.txt]errno: 34, code: ENOENT, path: nothing.txt }undefinedvar fs = require(fs);fs.stat(nothing.txt, function (err, stats) {console.log(err);});
  20. 20. Level 12var fs = require(fs);try {fs.stat(nothing.txt, function (err, stats) {// do nothing...});} catch (err) {console.log(err);}
  21. 21. 非同期の形式は常に最後の引数として完了コールバックを受け取ります。引数として渡される完了コールバックはメソッドに依存しますが、最初の引数は常に例外のために予約されています。操作が成功で完了すると最初の引数は null または undefined となります。同期の形式では、全ての例外はすぐにスローされます。例外は try/catch で捕まえることも、そのまま通過させることもできます。File System (fs) モジュールDocument より再度抜粋
  22. 22. socket.connect(port, [host], [connectListener])socket.connect(path, [connectListener])与えられたソケットでコネクションをオープンします。(中略...)この関数は非同期です。ソケットが確立されると connect イベントが生成されます。接続で問題があった場合は connect イベントは生成されず、 例外とともに error イベントが生成されます。Net モジュール Document より抜粋
  23. 23. Level 13events.js:72throw er; // Unhandled error event^Error: connect ECONNREFUSEDat errnoException (net.js:884:11)at Object.afterConnect [as oncomplete](net.js:875:19)var net = require(net);var client = net.connect({ port: 8128 });
  24. 24. Level 14{ [Error: connect ECONNREFUSED]code: ECONNREFUSED,errno: ECONNREFUSED,syscall: connect }var net = require(net);var client = net.connect({ port: 8128 });client.on(error, function (err) {console.log(err);});
  25. 25. Level 15var net = require(net);try {var client = net.connect({ port: 8128 });client.on(error, function (err) {// do nothing...});} catch (err) {console.log(err);}
  26. 26. Debugger
  27. 27. Level 16$ node debug test.js
  28. 28. Level 17$ node-inspector --web-port=8888 &$ node --debug-brk test.js$ npm install -g node-inspector
  29. 29. Leveling まとめ• エラーを読む• メッセージ および Stack• 機能毎のエラーハンドリングを行う• Debugger を使う
  30. 30. Next levelings...•Raise Errors•Domains

×