nodejs,express 自制错误日志

2017-07-16 20:13:14

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()
})


  • 2020-01-03 00:36:00

    break和continue详解for循环

    1. break:直接跳出当前循环体(while、for、do while)或程序块(switch)。其中switch case执行时,一定会先进行匹配,匹配成功返回当前case的值,再根据是否有break,判断是否继续输出,或是跳出判断(可参考switch的介绍)。 2. continue:不再执行循环体中continue语句之后的代码,直接进行下一次循环。

  • 2020-01-04 08:14:56

    input上传图片,获取图片上传尺寸

    onchange触发,获取当前file对象(这里可以获取图片的大小、类型、修改时间等) reader去读取文件 塞到页面,获取图片的宽高 移出图片节点

  • 2020-01-04 08:19:28

    flex 布局子内容p元素被撑开

    父元素 flex 布局,子元素有一行文字,将其设置为不换行隐藏后显示省略号,但实际并不是想象的那样,而导致布局变形。改怎么办?