2016-02-29 54 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);