ほぼすべてのクラッシュのプログラム、原因ノード「キャッチされない例外。」
「キャッチされない例外」が表示された場合、ノードは、実行のプロセスを終了するためにデフォルト設定されます。
:ファクトprocess.onに()メソッドは、次のようなプロセスレベルの例外を捕捉することができます
var http = require("http");
var server = http.createServer(function(req,res){
response.end("Hello JShaman.com");
});
server.listen(8000);
process.on("uncaughtException",function(err){
console.error(err.message,err.stack);
})
実行は、ブラウザでアクセスを開始し、文句を言うでしょう。
しかし、プログラムはエラーはなかったです。
如果不使用process.on()捕获这个异常,那么:
var http = require("http");
var server = http.createServer(function(req,res){
response.end("Hello JShaman.com");
});
server.listen(8000);
エラーが発生したときに明らかに、プログラムが終了します。
ただし、()process.onとキャプチャ、およびプログラムは本当に大丈夫、終了しないのですか?
答えは:良いではありません!
なぜ?
そうすることでリソースリーク、メモリリークが発生します。
参考文献:
このエラーが発生すると、他の言葉では、プログラムは崩壊にバインドされています。
彼はまもなく終了後にメモリの枯渇やその他の理由で、その結果、ためにもリソース・リークのため、すぐに終了しませんでした。
正しいアプローチは、次のとおりです。
var http = require("http");
var server = http.createServer(function(req,res){
response.end("Hello JShaman.com");
});
server.listen(8000);
process.on("uncaughtException",function(err){
console.error(err.message,err.stack);
server.close();
setTimeout(process.exit(),3000);
})
すなわち:処理プロセス、および終了します。
そして再び、それは問題で、デバッグの自然の原因を見つけ、問題を解決することです。
方法?どのようにデバッグしますか?
「ドメイン」を使用します。
var http = require("http");
var domain = require("domain");
var d = domain.create();
d.run(function(){
var server = http.createServer(function(req,res){
d.on("error",function(er){
res.statusCode = 500;
res.end("internal server error");
server.close();
setTimeout(process.exit(),3000,1);
})
response.end("Hello JShaman.com");
});
server.listen(8000);
});
ドメインを使用して、サンドボックスで髪コードの実行を行うことができます、あなたはより良いコードの一部を監視することができます。私たちがどのコードの一部に問題があると思われる場合は、問題を発見し、問題を解決する私たちを助けるために、当然のことながら、クライアントにエラーメッセージを監視するために出力することができるログを、この方法を使用することができます。