как отловить ошибку сервера в сапере (svelte) - PullRequest
0 голосов
/ 21 февраля 2020

Я перевожу свой маленький веб-сайт из экспресс-руля в проект экспресс + сапер.

Я бы хотел отлавливать ошибки на стороне сервера (например, добровольную ошибку при go в / api / ошибка) и визуализировать их с помощью шаблона sapper _error.svelte .

Я попытался просто выдать ошибку без моего пользовательского обработчика, но он возвращает некрасивую текстовую страницу только со стеком ошибок, и кажется, не перехватывается обработчиком ошибок сапера

, поэтому я добавил свой собственный обработчик ошибок, и я могу отрендерить HTML (голый, пока нет css), но есть ли способ, которым я мог бы использовать sapper _error.svelte template?

// ----------------------- src/server.js
import sirv from 'sirv'
import express from 'express'
import compression from 'compression'
import * as sapper from '@sapper/server'

import fatal500 from './middlewares/fatal500'

const { PORT, NODE_ENV } = process.env
const dev = NODE_ENV === 'development'

const app = express()

app.use(compression({ threshold: 0 }))
app.use(sirv('static', { dev }))

// the voluntary error thrower --------------------------------
app.get('/api/error', (req, res, next) => {
  const error = new Error('this is a voluntary error')
  error.code = 'VOLUNTARY'
  next(error)
})

app.use(sapper.middleware())

app.use(fatal500) // the custom error handler -----------

app.listen(PORT, err => {
  if (err) console.log('error', err)
})

// ---------------------src/middlewares/fatal500.js

export default function fatal500 (err, req, res, next) {
  if (err.code !== 'VOLUNTARY') console.error(err.stack)

  try {
    res.status(500)
      .type('html')
      .send(
        '<h1>Oooops ... 500 server error</h1>' +
        '<p>It seems the server has encountered an error,<br/>' +
        '   try to <a href=\'/\'> return to the website</a><br/>' +
        '   or to <a href="mailto:mail@mail.mail">send me the stack</a>' +
        '</p>' +
        '<h2>Error Stack :</h2>' +
        '<pre class="code"><code>' +
        err.stack +
        '
')} catch (e) {res.status (500) .type (' text ') .send (' \ n \ n '+' *** *********************************** \ n '+' Ooops ... 500 \ n '+' сервер обнаружил необработанную ошибку, \ n \ n '+', если она не является добровольной (переход к / api / error) \ n '+', пожалуйста, напишите мне следующий стэк в \ n '+' mail@mail.mail \ n ' + '************************************** \ n \ n' + 'ОРИГИНАЛЬНЫЙ ER ROR STACK ------------------ \ n \ n '+ err.stack +' \ n \ n '+' STACK ОБРАБОТКИ ОШИБОК --------- --------- \ n \ n '+ e.stack)}}
...