2017-07-14 24 views
0

我正在使用Node.js,Express和Pug创建一个简单的Web服务器。基于NodeJS,Express和Pug的应用程序的帕格错误处理

的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" 
    } 
} 

服务器开始启动命令:

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代码。

的问题是:

  • 登录,包括在服务器端的完整的堆栈信息的错误需要什么样的代码,模件,和/或启动选项?
  • 如何管理它以呈现更多用户友好的消息?
+0

您必须使用[**错误处理程序**](http://expressjs.com/en/guide/error-handling.html)。 –

回答

0

由于艾康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); 
    } 
}); 
相关问题