1.首先看Express 内置的异步错误处理
app.get('/', function (req, res) { throw new Error('oh no!') }) app.use(function (err, req, res, next) { console.log(err.message) // 噢!不! })
切记把app.use 放在所有的app.use 和route后面
对于同步执行的代码,以上的处理已经足够简单。然而,当异步程序在执行时抛出异常的情况,Express 就无能为力。原因在于当你的程序开始执行回调函数时,它原来的栈信息已经丢失。
对于异步错误处理我们采用下面的方式
app.get('/', function (req, res, next) { queryDb(function (err, data) { if (err) return next(err) // 处理数据 makeCsv(data, function (err, csv) { if (err) return next(err) // 处理 csv }) }) }) app.use(function (err, req, res, next) { // 处理错误 })
对于这种情况,可以使用 next 函数来将错误传递给下一个错误处理中间件
然后我们就可以在处理错误的地方进行日志打印 例子如下
app.use(function (err,req,res,next) { fs.appendFile("logs/log"+dateTime().split(' ')[0].replace(/-/g, "")+".txt",dateTime()+" "+req.originalUrl+"\n"+util.inspect(req.body)+"\n"+util.inspect(req.params)+"\n"+util.inspect(err)+"\n"+"\n",function (err) { if(err){ return console.log(err) } console.log("the file was saved") }) console.log(req.body) next() })