diff --git a/nuxt.config.js b/nuxt.config.js index 5867f7866..5dcd5e051 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -5,6 +5,7 @@ import fs from 'fs'; import path from 'path'; import {buildDict, buildList} from "./src/helpers"; import buildLocaleList from "./src/buildLocaleList"; +import formatError from './src/error'; const config = loadSuml('config'); const translations = loadSuml('translations'); @@ -148,7 +149,7 @@ export default { { src: '~/plugins/globals.js' }, { src: '~/plugins/auth.js' }, { src: '~/plugins/datepicker.js', ssr: false }, - { src: '~/plugins/track.js', ssr: false } + { src: '~/plugins/track.js', ssr: false }, ], components: true, buildModules: [], @@ -399,4 +400,16 @@ export default { routes.push({ name: 'all', path: `*`, component: resolve(__dirname, 'routes/pronoun.vue') }); }, }, + hooks: { + render: { + errorMiddleware(app) { + app.use((err, req, res, next) => { + if (err) { + console.error(formatError(err, req)); + } + next(err); + }); + }, + }, + }, } diff --git a/server/index.js b/server/index.js index 2764a2b39..49e73b735 100644 --- a/server/index.js +++ b/server/index.js @@ -12,6 +12,7 @@ import cookieSettings from "../src/cookieSettings"; import SQL from "sql-template-strings"; import csurf from 'csurf' import csrfHandleError from "@privyid/nuxt-csrf/server-middleware/handle-error"; +import formatError from '../src/error'; global.config = loadSuml('config'); global.translations = loadSuml('translations'); @@ -117,7 +118,7 @@ app.use(require('./routes/translations').default); app.use(require('./routes/subscription').default); app.use(function (err, req, res, next) { - console.error(err.stack); + console.error(formatError(err, req)); res.status(500).send('Unexpected server error'); req.db.close(); }); diff --git a/src/error.js b/src/error.js new file mode 100644 index 000000000..6fabc5449 --- /dev/null +++ b/src/error.js @@ -0,0 +1,3 @@ +module.exports = (err, req) => { + return `[${new Date().toISOString()}][${req ? (req.method + ' ' + req.url) : ''}] ${err.message || err} ${err.stack}`; +}