diff --git a/packages/backend/server/src/__tests__/app/graphql.e2e.ts b/packages/backend/server/src/__tests__/app/graphql.e2e.ts index 4bf3a618ef..29c6008f40 100644 --- a/packages/backend/server/src/__tests__/app/graphql.e2e.ts +++ b/packages/backend/server/src/__tests__/app/graphql.e2e.ts @@ -62,6 +62,8 @@ test('should init app', async t => { t.is(config.type, 'Affine'); t.true(Array.isArray(config.features)); + // make sure the request id is set + t.truthy(response.headers['x-request-id']); }); test('should return 404 for unknown path', async t => { @@ -76,4 +78,6 @@ test('should be able to call apis', async t => { .expect(200); t.is(res.body.flavor, 'graphql'); + // make sure the request id is set + t.truthy(res.headers['x-request-id']); }); diff --git a/packages/backend/server/src/app.module.ts b/packages/backend/server/src/app.module.ts index 1ba51ef99a..32ec5fe373 100644 --- a/packages/backend/server/src/app.module.ts +++ b/packages/backend/server/src/app.module.ts @@ -10,6 +10,7 @@ import { ScheduleModule } from '@nestjs/schedule'; import { ClsPluginTransactional } from '@nestjs-cls/transactional'; import { TransactionalAdapterPrisma } from '@nestjs-cls/transactional-adapter-prisma'; import { PrismaClient } from '@prisma/client'; +import { Response } from 'express'; import { get } from 'lodash-es'; import { ClsModule } from 'nestjs-cls'; @@ -57,6 +58,9 @@ export const FunctionalityModules = [ // make every request has a unique id to tracing return randomUUID(); }, + setup(cls, _req, res: Response) { + res.setHeader('X-Request-Id', cls.getId()); + }, }, plugins: [ // https://papooch.github.io/nestjs-cls/plugins/available-plugins/transactional/prisma-adapter diff --git a/packages/backend/server/src/app.ts b/packages/backend/server/src/app.ts index d492af0384..36833e9c6f 100644 --- a/packages/backend/server/src/app.ts +++ b/packages/backend/server/src/app.ts @@ -12,7 +12,6 @@ import { import { SocketIoAdapter } from './base/websocket'; import { AuthGuard } from './core/auth'; import { ENABLED_FEATURES } from './core/config/server-feature'; -import { responseRequestIdHeader } from './middleware/request-id'; import { serverTimingAndCache } from './middleware/timing'; export async function createApp() { @@ -32,7 +31,6 @@ export async function createApp() { } app.use(serverTimingAndCache); - app.use(responseRequestIdHeader); app.use( graphqlUploadExpress({ diff --git a/packages/backend/server/src/middleware/request-id.ts b/packages/backend/server/src/middleware/request-id.ts deleted file mode 100644 index 2185670340..0000000000 --- a/packages/backend/server/src/middleware/request-id.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NextFunction, Request, Response } from 'express'; -import { ClsServiceManager } from 'nestjs-cls'; -import onHeaders from 'on-headers'; - -export const responseRequestIdHeader = ( - _req: Request, - res: Response, - next: NextFunction -) => { - onHeaders(res, () => { - const requestId = ClsServiceManager.getClsService().getId(); - res.setHeader('X-Request-Id', requestId); - }); - - next(); -};