PostgreSQL
coub
css
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
python
task1
ubuntu
vim
virtualbox
анекдот
игры
интересно
музыка
стихи
цитаты
express.js
node.js
You have to
login
to post a new comment.
Express.js error handing
March 22, 2013
Поднобные объяснения на английском можно почитать вот тут.
Суть в том, что в express.js метод передачи ошибок несколько отличается. Лично мне пока не очень понятно почему так, но инженер который собственно и разрабатывает express.js выбрал такой путь. Наверное с точки зрения идеологии node.js и асинхронного программирования вообще - это правильно (именно передавать ошибки по цепочке, а не ловить их), но мне на данный момент кажется что это несколько кривовато. Если пойму со временем в чем смысл именно такого подхода, то допишу подробнее или исправлю запись.
Обычно в node.js exception-ы ловятся по-человечески, то есть вот так
Как управлять ошибками в express.js сейчас.
./app.js
Обычно в node.js exception-ы ловятся по-человечески, то есть вот так
app.get('/home', function(req, res){ // ошибка throw new Error('error text msg'); });В случае с express.js схема работы такая
app.get('/home', function(req, res, next){ // ошибка next(new Error('error text msg')); });Причем интересно, что в таком простом примере в express.js вполне сработает и первый вариант, но вот пример ниже уже работать не будет. Насколько я понял дело в том что выкинули общий хэндлер ошибок app.error(function(err,...)). Честно говоря причин такого решения я пока не нашел.
app.get('/home', function(req, res, next){ db.getRow("SELECT * FROM ...", function(err, row){ throw new Error('error text msg'); }); });В этом случае ошибка просвистит мимо и приложение завалится. Православный путь на данный момент — таскать все ошибки по цепочке вручную. Писанины к сожалению получается несколько больше, но вполне вписывается в предусмотренную схему. Неудобно, но пока найдется что-то повеселее - это рабочее решение. Надо будет собраться написать Tj на эту тему.
Как управлять ошибками в express.js сейчас.
./app.js
app.configure(function(){ //.. здесь вся остальная необходимая конфигурация // error 500 app.use(function(err, req, res, next) { res.status(500).render('err500', { title: 'ouch.. 500 error', err: err }); }); }); // "контроллер" блога var blog = require('./routes/blog'); // роут на конкретную операцию app.get('/post/:post_id', blog.blogPost);./routes/blog
// ... остальное содержимое контроллера exports.blogPost = function(req, res, next) { // .. проверки что-то ещё db.getRow("SEL33ECT b.* \ FROM blog b \ WHERE blog_id=?", [ post_id ], function(err, post){ // ловим ошибку if (err) { return next(err); } // тут что-то дальше происходит // ... }); };
Comments
No comments here yet.