针对NodeJS,Express和Pug应用程序的Pug错误处理

时间:2017-07-14 11:22:13

标签: node.js express error-handling pug

我使用Node.js,Express和Pug创建一个简单的Web服务器。

的package.json:

{
  "name": "testing",
  "version": "0.0.7",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.17.1",
    "command-line-args": "^4.0.6",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.3",
    "express": "~4.15.2",
    "less-middleware": "~2.2.0",
    "merge": "^1.2.0",
    "morgan": "~1.8.1",
    "pug": "^2.0.0-rc.2",
    "request": "^2.81.0",
    "serve-favicon": "~2.4.2",
    "sprintf-js": "^1.1.1",
    "tracer": "^0.8.9"
  }
}

使用start命令启动服务器:

npm start

当应用包含错误时,例如调用非现有的哈巴狗混合:

.container
    +hossa

呈现错误文本并显示在客户端浏览器中,如下所示:

/Projects/.../status.pug:2 1| .container > 2| +hossa 3| 4| 5| div.page.container.hidden#status(text="Status") pug_mixins.hossa is not a function

这没关系,但可以改进。

主要问题:除500代码外,我在日志输出中看不到任何错误。

问题是:

  • 需要哪些代码,模块和/或启动选项来记录错误,包括服务器端的完整堆栈信息?
  • 如何管理它以呈现更友好的用户信息?

1 个答案:

答案 0 :(得分:0)

正如Aikon Mogwai评论的那样 - 我只是忘了添加一个合适的错误处理程序。

这样的事情:

app.use(function(err, req, res, next) {

    // very basic!
    console.error(err.stack);

    // show user some message - for Ajax requests which expects a specific format
    res.send(JSON.stringify({ok: false, message: err.message}));


    // OR

    // more advanced:
    // check error type, context etc. and act accordingly
    // - log message
    // - send appropriaty error page etc.
    // - eventually use next handler
    // - set res.status
    // sth. like this

    if (req.xhr) {
      res.status(500).send({ error: 'Something failed!' });
    } else {
      next(err);
    }
});