В моем операторе select, если параметр из URL-адреса неверен, я хочу отправить пользователя в пользовательский шаблон ошибок.

Я попытался настроить рендер, но переданные параметры не работают.

#routes.js
router.get('/select-id/', function(req, res) {
    var id = req.query.id;
    if(id && id.match(/^[0-9]+$/) != null){
        mc('SELECT * FROM tasks where ID = ' + id, function (error, results, fields) {
         if (error) throw error;
          res.render('pug-select-all', {
            title: 'Results',
            data: results
          });
        });
    }
    else {
        res.render('error', {status: 500, stack: 'error'});
    }
});
#error.pug
extends layout

block content
  h1= message
  h2= error.status
  pre #{error.stack}

Я пробовал разные вещи, но я всегда получаю сообщение об ошибке в файле rout.js или в шаблоне pug. Если я оставлю это как приведенный выше код, я получу Cannot read property 'status' of undefined в error.pug

2
baumli 16 Авг 2019 в 22:24

2 ответа

Лучший ответ

Глядя на документы, вы должны либо отправить свой объект ответа как:

res.render('error', { "error": {status: 500, stack: 'error' } });

Или в шаблоне pug, откройте его как член первого уровня , например:

#error.pug
extends layout

block content
  h1= message
  h2= status
  pre #{stack}
3
1565986223 16 Авг 2019 в 20:28

Вот как это работает для меня

res.status(404).render('errorPage', {
  title: '404 - page nt found!'
});

Для ваших нужд это может быть

res.status(500).render('error', {
  status: 500, 
  stack: 'error'
});
0
kmgt 20 Авг 2019 в 12:39