Better errors
This commit is contained in:
parent
61ed56d4f8
commit
d48824ab49
4 changed files with 65 additions and 19 deletions
24
app.js
24
app.js
|
@ -82,23 +82,25 @@ app.use(function(req, res, next) {
|
|||
// development error handler
|
||||
// will print stacktrace
|
||||
if (app.get('env') === 'development') {
|
||||
app.use(function(err, req, res, next) {
|
||||
res.status(err.status || 500);
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: err
|
||||
});
|
||||
app.use(function(err, req, res, next) {
|
||||
res.status(err.status || 500);
|
||||
res.render('error', {
|
||||
page: "error",
|
||||
message: err.message,
|
||||
error: err
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// production error handler
|
||||
// no stacktraces leaked to user
|
||||
app.use(function(err, req, res, next) {
|
||||
res.status(err.status || 500);
|
||||
res.render('error', {
|
||||
message: err.message,
|
||||
error: {}
|
||||
});
|
||||
res.status(err.status || 500);
|
||||
res.render('error', {
|
||||
page: "error",
|
||||
message: err.message,
|
||||
error: {status: err.status || 500}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -128,3 +128,18 @@ h3 {
|
|||
height: 100%;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.error h1, .error h2 {
|
||||
font-weight: 300;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.error .main h1 {
|
||||
font-size: 2em;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.error h2 {
|
||||
font-size: 4em;
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
|
|
@ -15,18 +15,23 @@ require("fs").readdirSync(path.join(__dirname, "..", "lib", "services")).forEach
|
|||
});
|
||||
|
||||
|
||||
module.exports = function(req, res) {
|
||||
module.exports = function(req, res, next) {
|
||||
var serviceId = req.params.service;
|
||||
var type = req.params.type;
|
||||
var itemId = req.params.id;
|
||||
var promises = [];
|
||||
|
||||
req.db.matches.findOne({item_id:serviceId + itemId}).then(function(doc) {
|
||||
if (!services[serviceId] || (type != "album" && type != "track")) {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
req.db.matches.findOne({_id:serviceId + itemId}).then(function(doc) {
|
||||
if (doc) {
|
||||
res.render(type, {page: type, items: doc.items});
|
||||
} else {
|
||||
services[serviceId].lookupId(itemId, type).then(function(item) {
|
||||
|
||||
Q.timeout(services[serviceId].lookupId(itemId, type), 5000).then(function(item) {
|
||||
for (var id in services) {
|
||||
if (id != serviceId) {
|
||||
promises.push(Q.timeout(services[id].search(item), 5000));
|
||||
|
@ -51,10 +56,17 @@ module.exports = function(req, res) {
|
|||
});
|
||||
|
||||
items.unshift(item);
|
||||
req.db.matches.save({item_id:serviceId + itemId, items:items});
|
||||
req.db.matches.save({_id:serviceId + itemId, items:items});
|
||||
cache[serviceId][type + "-" + itemId] = items;
|
||||
res.render(type, {page: type, items: items});
|
||||
});
|
||||
}, function(err) {
|
||||
var error = new Error("An unexpected error happenend")
|
||||
if (err.code == "ETIMEDOUT") {
|
||||
error = new Error("Error talking to music service");
|
||||
error.status = "502";
|
||||
}
|
||||
next(error);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,3 +1,20 @@
|
|||
<h1><%= message %></h1>
|
||||
<h2><%= error.status %></h2>
|
||||
<pre><%= error.stack %></pre>
|
||||
<% include header.ejs %>
|
||||
<header>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1><a href="/">match<span class="audio-lighten">.audio</span></a></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container main">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-md-offset-3">
|
||||
<h2><%= error.status %></h2>
|
||||
<h1><%= message %></h1>
|
||||
<% if (error.stack) { %><pre><%= error.stack %></pre><% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% include footer.ejs %>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue