summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/web/ClientServerService.ts
diff options
context:
space:
mode:
authorkakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>2023-04-12 12:52:14 +0900
committerGitHub <noreply@github.com>2023-04-12 12:52:14 +0900
commit49749b46c4c8914947e0950069bcf4431f157c4f (patch)
tree6af5d7439b5fc17772b02d1bdc5566b4789fe615 /packages/backend/src/server/web/ClientServerService.ts
parentfeat: role timeline (diff)
downloadsharkey-49749b46c4c8914947e0950069bcf4431f157c4f.tar.gz
sharkey-49749b46c4c8914947e0950069bcf4431f157c4f.tar.bz2
sharkey-49749b46c4c8914947e0950069bcf4431f157c4f.zip
feat(server): Misskey Webでユーザーフレンドリーなエラーページを出す (#10590)
* (add) user-friendly error page * Update CHANGELOG.md * (add) cache-control header * Add ClientLoggerService * Log params and query * remove error stack on client * fix pug * 文面を調整 * :art] --------- Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Diffstat (limited to 'packages/backend/src/server/web/ClientServerService.ts')
-rw-r--r--packages/backend/src/server/web/ClientServerService.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index 99ae1b7af6..50b23a0682 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -1,6 +1,7 @@
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import { Inject, Injectable } from '@nestjs/common';
+import { v4 as uuid } from 'uuid';
import { createBullBoard } from '@bull-board/api';
import { BullAdapter } from '@bull-board/api/bullAdapter.js';
import { FastifyAdapter } from '@bull-board/fastify';
@@ -26,6 +27,7 @@ import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityServi
import { ClipEntityService } from '@/core/entities/ClipEntityService.js';
import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js';
import type { ChannelsRepository, ClipsRepository, FlashsRepository, GalleryPostsRepository, NotesRepository, PagesRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
+import type Logger from '@/logger.js';
import { deepClone } from '@/misc/clone.js';
import { bindThis } from '@/decorators.js';
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
@@ -34,6 +36,7 @@ import manifest from './manifest.json' assert { type: 'json' };
import { FeedService } from './FeedService.js';
import { UrlPreviewService } from './UrlPreviewService.js';
import type { FastifyInstance, FastifyPluginOptions, FastifyReply } from 'fastify';
+import { ClientLoggerService } from './ClientLoggerService.js';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
@@ -46,6 +49,8 @@ const viteOut = `${_dirname}/../../../../../built/_vite_/`;
@Injectable()
export class ClientServerService {
+ private logger: Logger;
+
constructor(
@Inject(DI.config)
private config: Config,
@@ -85,6 +90,7 @@ export class ClientServerService {
private urlPreviewService: UrlPreviewService,
private feedService: FeedService,
private roleService: RoleService,
+ private clientLoggerService: ClientLoggerService,
@Inject('queue:system') public systemQueue: SystemQueue,
@Inject('queue:endedPollNotification') public endedPollNotificationQueue: EndedPollNotificationQueue,
@@ -649,6 +655,24 @@ export class ClientServerService {
return await renderBase(reply);
});
+ fastify.setErrorHandler(async (error, request, reply) => {
+ const errId = uuid();
+ this.clientLoggerService.logger.error(`Internal error occured in ${request.routerPath}: ${error.message}`, {
+ path: request.routerPath,
+ params: request.params,
+ query: request.query,
+ code: error.name,
+ stack: error.stack,
+ id: errId,
+ });
+ reply.code(500);
+ reply.header('Cache-Control', 'max-age=10, must-revalidate');
+ return await reply.view('error', {
+ code: error.code,
+ id: errId,
+ });
+ });
+
done();
}
}