Node.js http.createServer如何获取错误

use*_*120 16 javascript node.js

我是node.js的新手,我正在尝试基本的东西.

我的代码是这样的

var http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
}).listen(8888);
Run Code Online (Sandbox Code Playgroud)

这是一个问题 - 如何在调用createServer时看到抛出的异常(或抛出的事件)?我尝试过try/catch但它似乎不起作用.在模块的API中,我找不到任何对它的引用.我问,因为我意外地在一个端口上启动了一个服务器(8888),我得到的错误(在命令行中)是错误:EDDRINUSE,这很有用但是能够理解如何捕获错误会很好在节点中.

Bra*_*rad 28

您可以通过在正在创建的服务器上处理错误事件来执行此操作.首先,得到结果.createServer().

var server = http.createServer(function(request, response) {
Run Code Online (Sandbox Code Playgroud)

然后,您可以轻松处理错误:

server.on('error', function (e) {
  // Handle your error here
  console.log(e);
});
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的解决方案,因为它可以监听正确的"服务器"范围,而不是整个过程. (2认同)
  • @GeoffreyHale `http.Server` 扩展了 `net.Server`。https://nodejs.org/api/net.html#net_event_error (2认同)

Ano*_*oop 5

使用以下代码打印未捕获异常的堆栈跟踪。

process.on('uncaughtException', function( err ) {
            console.error(err.stack);
 });
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的方法,你可能会疯狂地泄漏资源([>> 官方声明](https://nodejs.org/api/process.html#process_event_uncaughtexception)) (2认同)

Jør*_*gen 1

您可以使用

process.on('uncaughtException', function(e){
    console.log(e);
});
Run Code Online (Sandbox Code Playgroud)

处理未捕获的异常。任何来自 Web 服务器的未处理的异常都可以像这样捕获。