feat: add HTTP server pool example: express request handler pool
[poolifier.git] / examples / typescript / http-client-pool / src / worker.ts
CommitLineData
49ac634f
JB
1import { ThreadWorker } from 'poolifier'
2import nodeFetch from 'node-fetch'
3import {
4 type RequestInfo as NodeFetchRequestInfo,
5 type ResponseInit as NodeFetchRequestInit
6} from 'node-fetch'
7e80208e 7import axios from 'axios'
49ac634f
JB
8import { type WorkerData, type WorkerResponse } from './types.js'
9
95e50651 10class HttpClientWorker extends ThreadWorker<WorkerData, WorkerResponse> {
49ac634f
JB
11 public constructor () {
12 super({
13 node_fetch: async (workerData?: WorkerData) => {
14 const response = await nodeFetch(
7e80208e 15 (workerData as WorkerData).input as URL | NodeFetchRequestInfo,
49ac634f
JB
16 workerData?.init as NodeFetchRequestInit
17 )
18 // The response is not structured-cloneable, so we return the response text body instead.
19 return {
20 text: await response.text()
21 }
22 },
23 fetch: async (workerData?: WorkerData) => {
24 const response = await fetch(
7e80208e 25 (workerData as WorkerData).input as URL | RequestInfo,
49ac634f
JB
26 workerData?.init as RequestInit
27 )
28 // The response is not structured-cloneable, so we return the response text body instead.
29 return {
30 text: await response.text()
31 }
7e80208e
JB
32 },
33 axios: async (workerData?: WorkerData) => {
34 const response = await axios({
35 method: 'get',
36 url: (workerData as WorkerData).input as string,
37 ...workerData?.axiosRequestConfig
38 })
39 return {
40 text: response.data
41 }
49ac634f
JB
42 }
43 })
44 }
45}
46
fac9ce96 47export const httpClientWorker = new HttpClientWorker()