2016-02-29 59 views
3

以下是我的代码:节点JS HTTP服务器错误处理

const http = require('http'); 
var server1 = http.createServer(function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2) + '\n' + req.url); 
    res.end(); 
    throw new Error("Error!!!"); 
}); 
server1.on("error", err=>console.log(err)); 
server1.listen(5060); 

为什么从回调抛出的异常不会被server1.on处理(“错误”,...)和过程停止? 如果通过监听“错误”事件无法处理这样的异常, 我该如何处理这样的异常,以便http服务器仍可以运行良好?

+2

的'error'在'server1.on'指'error'事件由服务器发出,而不是抛出Error对象为你的情况。为了处理抛出的错误,你需要'try-catch'。 –

回答

3

使用emit代替throw

const http = require('http'); 
var server1 = http.createServer(function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2) + '\n' + req.url); 
    res.end(); 
    // throw new Error("Error!!!"); 
    this.emit('error', new Error("Error!!!")); 
}); 
server1.on("error", err=>console.log(err)); 
server1.listen(5060);