我们可以uncaughtException来全局捕获未捕获的Error,同时你还可以将此函数的调用栈打印出来,捕获之后可以有效防止node进程退出,如:
process.on('uncaughtException', function (err) {
//打印出错误
console.log(err)
//打印出错误的调用栈方便调试
console.log(err.stack);
})
这相当于在node进程内部进行守护, 但这种方法很多人都是不提倡的,说明你还不能完全掌控Node.JS的异常。
使用 try/catch
我们还可以在回调前加try/catch,同样确保线程的安全。
var http = require('http')
http.createServer(function(req, res) {
try {
handler(req, res)
} catch(e) {
console.log('\r\n', e, '\r\n', e.stack)
try {
res.end(e.stack)
} catch(e) { }
}
}).listen(8080, '127.0.0.1')
console.log('Server running at http://127.0.0.1:8080/')
var handler = function (req, res) {
//Error Popuped
var name = req.params.name
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('Hello ' + name)
}
这种方案的好处是,可以将错误和调用栈直接输出到当前发生的网页上。
启动文件最后加上这个处理试试看app.jsapp.use(function (err, req, res, next) {
res.status(err.status || 500)
res.render('error', {
message: err.message,
error: {}
})
})
那你需要查看一下mysql connector的api一般肯定有异常处理机制。我用的mongoose。在声明连接的时候加上异常处理。
mongoose.connection.on('error', function (err) {
console.error('Mongoose connection error: ' + err)
})
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)