2017-07-14 31 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); 
    } 
}); 
相關問題