2017-04-03 89 views
0

我有节点7.8.0,我已阅读Node.js Best Practice Exception Handling如何设置Node.js错误处理?

仍然我似乎无法理解node.js中的错误处理。

对于我http我有

server.on('error',() => console.log('Here I should be replacing 
the Error console.')); 

对于404我有这样的代码

app.use((req, res, next) => { 
    let err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 
app.use((err, req, res) => { 
    res.status(err.status); 
    res.render('error'); 
}); 

404被抓住了,它创建了错误的对象,然后它通过渲染错误观点正确的处理我想要。但它也会向我的控制台抛出错误日志,我不知道该从哪里来,以及如何阻止它。

我想使用自己的错误处理,并且从来没有像404一样的错误写入控制台。

我试过的代码似乎并不奏效。

var server = http.createServer(app); 
const onError =() => console.log('Here I should be replacing the Error console.'); 
server.on('error', onError); 
server.on('uncaughtException', onError); 
process.on('uncaughtException', onError); 

回答

0

我不确定它如何渲染错误视图,因为错误处理程序只需要4个参数,而只传递3个参数。这就是Express如何区分错误处理程序和正常路径处理程序(记录在文件here)。

试试这个:

app.use((err, req, res, next) => { 
    res.status(err.status); 
    res.render('error'); 
}); 
0

这是由于expressjs。 Expressjs如果env不等于测试,则所有错误将写入控制台。

function logerror(err) { 
    if (this.get('env') !== 'test') console.error(err.stack || err.toString()); 
} 

而且http.Server没有事件命名为错误

+0

你是对的,如果我设置的环境中测试它的工作原理。但是如果我将其设置为生产,它仍然会将错误发送给控制台。有没有办法让我不能为任何环境芽的发展做到这一点? – Ragnar