Среда: node.js, Express
Я пытаюсь использовать шаблон обработки ошибок, основанный на работе, проделанной Валерием Карповым (создатель Mon goose). Он объясняет шаблон, который он использует в этой статье: Руководство 80/20 по Express Обработка ошибок .
На приведенном ниже упрощенном сервере я могу успешно передавать ошибки в свою обработку ошибок промежуточное программное обеспечение.
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.get('/', async function(req, res, next) {
let catStatus = false;
function answer(X) {
return new Promise( function(resolve, reject) {
if(X) {
resolve('cat does exist');
} else {
reject('whoops, cat does not exist');
}
});
}
answer(catStatus)
.then( function(data) {
res.render('index', { output: data });
})
.catch( function(error) {
next(new Error(error));
});
});
app.use( function(error, req, res, next) {
res.render('error', { error });
});
app.listen(8080, function(){
console.log('listening on port 8080');
});
Однако я застрял на том, как реализовать его шаблон обертки с моей установкой basi c. Содержит ли код внутри моей '/'
конечной точки go внутри его '*'
конечной точки?
Если да, то что-нибудь go внутри его function wrapAsync(fn)
? Должен ли я просто удалить 2 его строки комментариев и оставить все как есть?
app.get('*', wrapAsync(async function(req, res) {
await new Promise(resolve => setTimeout(() => resolve(), 50));
// Async error!
throw new Error('woops');
}));
app.use(function(error, req, res, next) {
// Gets called because of `wrapAsync()`
res.json({ message: error.message });
});
app.listen(3000);
function wrapAsync(fn) {
return function(req, res, next) {
// Make sure to `.catch()` any errors and pass them along to the `next()`
// middleware in the chain, in this case the error handler.
fn(req, res, next).catch(next);
};
}