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

More Related Content

What's hot

PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。bleis tift
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02mega80b
 
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPADPuppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPADGosuke Miyashita
 
Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.specKent Ohashi
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
Goの文法の実例と解説
Goの文法の実例と解説Goの文法の実例と解説
Goの文法の実例と解説Ryuji Iwata
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share久司 中村
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.specKent Ohashi
 
AVAの話 #mentaicojs
AVAの話 #mentaicojsAVAの話 #mentaicojs
AVAの話 #mentaicojsHiroyuki Anai
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosTomohiro Kumagai
 

What's hot (20)

Testman
TestmanTestman
Testman
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
PHP language update 201211
PHP language update 201211PHP language update 201211
PHP language update 201211
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02
 
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPADPuppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
 
URLで遊ぼう
URLで遊ぼうURLで遊ぼう
URLで遊ぼう
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.spec
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
Goの文法の実例と解説
Goの文法の実例と解説Goの文法の実例と解説
Goの文法の実例と解説
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.spec
 
AVAの話 #mentaicojs
AVAの話 #mentaicojsAVAの話 #mentaicojs
AVAの話 #mentaicojs
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
 

Viewers also liked

Gruntでフロントの生産性up
Gruntでフロントの生産性upGruntでフロントの生産性up
Gruntでフロントの生産性upKazuyoshi Goto
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!leverages_event
 
自動化ツール「Grunt.js」について
自動化ツール「Grunt.js」について自動化ツール「Grunt.js」について
自動化ツール「Grunt.js」についてSeiko Kuchida
 
Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築kamiyam .
 
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたフロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたShou Takenaka
 
学校では教えてくれないWebセキュリティ
学校では教えてくれないWebセキュリティ学校では教えてくれないWebセキュリティ
学校では教えてくれないWebセキュリティYuto Maeda
 
Gruntを導入しよう!の話
Gruntを導入しよう!の話Gruntを導入しよう!の話
Gruntを導入しよう!の話Koji Nakamura
 
早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]Masayuki Maekawa
 
Yeomanについて
YeomanについてYeomanについて
Yeomanについてjsugiyama
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.jsHiroki Toyokawa
 
Gulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くするGulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くするHayashi Yuichi
 

Viewers also liked (13)

Gruntでフロントの生産性up
Gruntでフロントの生産性upGruntでフロントの生産性up
Gruntでフロントの生産性up
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
自動化ツール「Grunt.js」について
自動化ツール「Grunt.js」について自動化ツール「Grunt.js」について
自動化ツール「Grunt.js」について
 
Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築
 
フロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみたフロント開発をがんばるためにGulpとGruntに入門してみた
フロント開発をがんばるためにGulpとGruntに入門してみた
 
学校では教えてくれないWebセキュリティ
学校では教えてくれないWebセキュリティ学校では教えてくれないWebセキュリティ
学校では教えてくれないWebセキュリティ
 
Gruntを導入しよう!の話
Gruntを導入しよう!の話Gruntを導入しよう!の話
Gruntを導入しよう!の話
 
早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]
 
Yeomanについて
YeomanについてYeomanについて
Yeomanについて
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
Gulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くするGulp入門 - コーディングを10倍速くする
Gulp入門 - コーディングを10倍速くする
 
Grunt入門
Grunt入門Grunt入門
Grunt入門
 

Similar to Node.js Error & Debug Leveling

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話Masakazu Muraoka
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Nextdynamis
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみたTakahiro Hidaka
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTMasahiro Nagano
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021Rui Hirokawa
 
Unit test in android
Unit test in androidUnit test in android
Unit test in androidTatsuya Maki
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現するAtsushi Tadokoro
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftTomohiro Kumagai
 
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/WebサービスにアクセスするEWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/WebサービスにアクセスするKiyoshi Sawada
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023Rui Hirokawa
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project PanamaYuichi Sakuraba
 
node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装Yohei Fushii
 

Similar to Node.js Error & Debug Leveling (20)

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話Async awaitでの繰り返し処理についての小話
Async awaitでの繰り返し処理についての小話
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
 
Unit test in android
Unit test in androidUnit test in android
Unit test in android
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
Swift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswiftSwift 2.0 で変わったところ「前編」 #cswift
Swift 2.0 で変わったところ「前編」 #cswift
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/WebサービスにアクセスするEWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
EWD 3トレーニングコース#33 ewd-xpressアプリケーションからREST/Webサービスにアクセスする
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
 
Project Loom + Project Panama
Project Loom + Project PanamaProject Loom + Project Panama
Project Loom + Project Panama
 
node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装node.jsによる お手軽画像uploader実装
node.jsによる お手軽画像uploader実装
 

More from kumatch kumatch

AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話kumatch kumatch
 
Node.js patterns of module export / require
Node.js patterns of module export / requireNode.js patterns of module export / require
Node.js patterns of module export / requirekumatch kumatch
 
[Node] Multiprocessing and runs continuously
[Node] Multiprocessing and runs continuously[Node] Multiprocessing and runs continuously
[Node] Multiprocessing and runs continuouslykumatch kumatch
 
PHPカンファレンス関西2011/スマートフォン時代のWebシステム
PHPカンファレンス関西2011/スマートフォン時代のWebシステムPHPカンファレンス関西2011/スマートフォン時代のWebシステム
PHPカンファレンス関西2011/スマートフォン時代のWebシステムkumatch kumatch
 

More from kumatch kumatch (7)

AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話AngularJSからReactに移ったケースの話
AngularJSからReactに移ったケースの話
 
Node platforms
Node platformsNode platforms
Node platforms
 
Nodeを稼働させる
Nodeを稼働させるNodeを稼働させる
Nodeを稼働させる
 
Node.js patterns of module export / require
Node.js patterns of module export / requireNode.js patterns of module export / require
Node.js patterns of module export / require
 
Learning a node stream
Learning a node streamLearning a node stream
Learning a node stream
 
[Node] Multiprocessing and runs continuously
[Node] Multiprocessing and runs continuously[Node] Multiprocessing and runs continuously
[Node] Multiprocessing and runs continuously
 
PHPカンファレンス関西2011/スマートフォン時代のWebシステム
PHPカンファレンス関西2011/スマートフォン時代のWebシステムPHPカンファレンス関西2011/スマートフォン時代のWebシステム
PHPカンファレンス関西2011/スマートフォン時代のWebシステム
 

Node.js Error & Debug Leveling