2012-01-19 25 views
1

我希望能夠向我的用戶發送一條友好的錯誤消息,只要我無法從node.js內部連接到我的MongoDB服務器,而不是像現在一樣讓node.js嚇壞了。用node.js顯示錯誤

顯然這不會工作,因爲我不能從路由方法外部訪問響應變量(app.get('/' ...),所以我應該怎麼做呢?
沒有必要顯示一些奇特的東西,但只是通知用戶一個臨時問題將是驚人的。

mongoose.connect('mongodb://localhost/test', function(err) { 
    if (err) { 
     //response.send('Temporary problem', 500); 
    } 
}); 

// Routes 
app.get('/', index.index); 
//... And so on 

回答

0

如果發生連接錯誤,您可以使用替代路由,因此不必在每個請求處理程序中執行連接檢查。

function connect() { 
    mongoose.connect(connStr, function(err) { 
    if (err) { 
     // all GET requests will end with error message 
     app.get('*', function(req, res) { 
     res.end('DB error'); 
     }); 

     // handle errors, retry connection attempt or something... 

     app.listen(...); 
     return; 
    } 

    // Routes 
    app.get('/', index.index); 
    //... And so on 

    app.listen(...); 
    }; 
} 

var app = express.createServer(); 
connect(); 

你應該然而,找到一種方法來降航線'*'當你的連接將達到。

0

您可以從塊

mongoose.connect('mongodb://localhost/test', function(err) { 
    if (err) { 
     //response.send('Temporary problem', 500); 
    } 
}); 

設置一個全局變量。如果這個全局變量是真/假/ ...,在你的路線方法相應的行爲。

不是最漂亮的方法,但它會工作並且很容易實現。

1

快速顯示中間件時出錯。把它放在你的路由器之後。

app.use(express.errorHandler({ dumpExceptions: true })); 

你可以通過你的路線內調用next()使用

app.get('/user/:userId', function(req, res, next){ 
    User.get(req.params.userId, function(err, user){ 
    if (err) return next(err); 
    res.send('user ' + user.name); 
    }); 
});