ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как отловить URL с ошибкой в шаблонизаторе?

Столкнулся с проблемой, большой проект, трафика прилично, и время от времени в логах pm2 вылетают ошибки
TypeError: Cannot read property 'href' of undefined
    at eval (eval at wrap (/var/www/site.ru/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:19:718)
    at template (eval at wrap (/var/www/site.ru/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:41:78)
    at Object.exports.renderFile (/var/www/site.ru/node_modules/pug/lib/index.js:427:38)
    at Object.exports.renderFile (/var/www/site.ru/node_modules/pug/lib/index.js:417:21)
    at View.exports.__express [as engine] (/var/www/site.ru/node_modules/pug/lib/index.js:464:11)
    at View.render (/var/www/site.ru/node_modules/express/lib/view.js:135:8)
    at tryRender (/var/www/site.ru/node_modules/express/lib/application.js:640:10)
    at Function.render (/var/www/site.ru/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/var/www/site.ru/node_modules/express/lib/response.js:1008:7)
    at /var/www/site.ru/index.js:109:14
    at Layer.handle_error (/var/www/site.ru/node_modules/express/lib/router/layer.js:71:5)
    at trim_prefix (/var/www/site.ru/node_modules/express/lib/router/index.js:315:13)
    at /var/www/site.ru/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/var/www/site.ru/node_modules/express/lib/router/index.js:335:12)
    at next (/var/www/site.ru/node_modules/express/lib/router/index.js:275:10)
    at Layer.handle_error (/var/www/site.ru/node_modules/express/lib/router/layer.js:67:12)
    at trim_prefix (/var/www/site.ru/node_modules/express/lib/router/index.js:315:13)
    at /var/www/site.ru/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/var/www/site.ru/node_modules/express/lib/router/index.js:335:12)
    at next (/var/www/site.ru/node_modules/express/lib/router/index.js:275:10)
    at Layer.handle_error (/var/www/site.ru/node_modules/express/lib/router/layer.js:67:12)
    at trim_prefix (/var/www/site.ru/node_modules/express/lib/router/index.js:315:13)


Все URL пересмотрел, и так и не смог воспроизвести ошибку, знаю участок где ошибка вылетает, знаю что должно быть там. Сервер почему то не подхватывает объект на какой то странице, 3-4 ошибки в день.
В index.js
// error handler
app.use(function(e, request, response, next) {
    if (request.headers['x-requested-with'] == 'XMLHttpRequest') return response.status(e.status || 403), response.send(e.message)

    if(e.code == 'EBADCSRFTOKEN') e.message = 'Переданный вами токен недействителен ;('
    response.locals.message = e.message
    response.locals.error = request.app.get('env') === 'development' ? e : {}
  
    response.status(e.status || 500)
    if(e.status > 404) console.log(e)
    response.render('error', { page: {
        name: `${e.status} ${e.message}`
    } })
})

104 строка это response.render('error', { page: {

До кода отлова ошибки подключен мидлвар с app.use(require('./libs/language'))
Который создает контейнер для всех страниц с объектом данных, и этот объект почему то не передается в layout.pug на какой то странице, хотя все страницы ошибки я воспроизводил и все вроде бы гуд.
Можно ли выявить на какой странице вылетела ошибка? У меня уже появилась идея js-ом чекать фронтенд на 500 и записать в какой нибудь файл, но это чет совсем ))
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы