Я перевожу свой маленький веб-сайт из экспресс-руля в проект экспресс + сапер.
Я бы хотел отлавливать ошибки на стороне сервера (например, добровольную ошибку при 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)}}