diff --git a/src/createMockServer.ts b/src/createMockServer.ts index cd749f7..649f5b8 100644 --- a/src/createMockServer.ts +++ b/src/createMockServer.ts @@ -1,4 +1,10 @@ -import type { ViteMockOptions, MockMethod, NodeModuleWithCompile, Recordable } from './types'; +import type { + ViteMockOptions, + MockMethod, + NodeModuleWithCompile, + Recordable, + RespThisType, +} from './types'; import path from 'path'; import fs from 'fs'; @@ -81,15 +87,16 @@ export async function requestMiddleware(opt: ViteMockOptions) { } } + const self: RespThisType = { req, res, parseJson: parseJson.bind(null, req) }; if (isFunction(rawResponse)) { - await rawResponse(req, res); + await rawResponse.bind(self)(req, res); } else { const body = await parseJson(req); - const mockResponse = isFunction(response) - ? response({ url: req.url, body, query, headers: req.headers }) - : response; res.setHeader('Content-Type', 'application/json'); res.statusCode = statusCode || 200; + const mockResponse = isFunction(response) + ? response.bind(self)({ url: req.url, body, query, headers: req.headers }) + : response; res.end(JSON.stringify(Mock.mock(mockResponse))); } diff --git a/src/types.ts b/src/types.ts index d3f1956..3bb40db 100644 --- a/src/types.ts +++ b/src/types.ts @@ -16,6 +16,12 @@ export interface ViteMockOptions { logger?: boolean; } +export interface RespThisType { + req: IncomingMessage; + res: ServerResponse; + parseJson: () => any; +} + export type MethodType = 'get' | 'post' | 'put' | 'delete' | 'patch'; export type Recordable = Record; @@ -26,9 +32,12 @@ export declare interface MockMethod { timeout?: number; statusCode?: number; response?: - | ((opt: { url: Recordable; body: Recordable; query: Recordable; headers: Recordable }) => any) + | (( + this: RespThisType, + opt: { url: Recordable; body: Recordable; query: Recordable; headers: Recordable } + ) => any) | any; - rawResponse?: (req: IncomingMessage, res: ServerResponse) => void; + rawResponse?: (this: RespThisType, req: IncomingMessage, res: ServerResponse) => void; } export interface NodeModuleWithCompile extends NodeModule {