Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Node.js Error & Debug Leveling

4,147 views

Published on

  • Dating direct: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F4cEJi ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

×