1
1
# objective-http
2
2
Proxy classes for creating a http server
3
3
4
+
4
5
## Server
5
6
6
- There are all ``` Server ``` classes feature.
7
- Your endpoints must implement ``` Endpoint ``` class interface (``` route ``` and ``` handle ``` functions ).
7
+ There are all ` Server ` classes feature.
8
+ Your endpoints must implement ` Endpoint ` class interface (` route() ` and ` async handle(request) ` methods ).
8
9
9
- ``` javascript
10
+ ``` javascript
10
11
const http = require (' node:http' );
11
12
const cluster = require (' node:cluster' );
12
13
@@ -28,15 +29,15 @@ const {
28
29
new ClusteredServer (
29
30
new LoggedServer (
30
31
new Server (
31
- http,
32
- new LoggedInputRequest (new JsonInputRequest (new InputRequest ()), console ),
33
- new LoggedOutputResponse (new JsonOutputResponse (new OutputResponse ()), console ),
34
32
new Endpoints ([
35
33
new MyFirstEndpoint (new LoggedEndpoint (new Endpoint (), console )),
36
34
new MySecondEndpoint (new LoggedEndpoint (new Endpoint (), console )),
37
35
new MyThirdEndpoint (new LoggedEndpoint (new Endpoint (), console ))
38
36
]),
39
- {port: server_port}
37
+ {port: server_port},
38
+ new LoggedInputRequest (new JsonInputRequest (new InputRequest ()), console ),
39
+ new LoggedOutputResponse (new JsonOutputResponse (new OutputResponse ()), console ),
40
+ http
40
41
),
41
42
console
42
43
),
@@ -45,19 +46,21 @@ new ClusteredServer(
45
46
).start ();
46
47
```
47
48
49
+
48
50
## Client
49
51
50
- ``` javascript
51
- const https = require (' node:https' );
52
+ ``` javascript
53
+ const http = require (' node:http' );
54
+ const requestFunction = http .request ;
52
55
const {
53
56
OutputRequest ,
54
57
InputResponse
55
58
} = require (' objective-http' ).client ;
56
59
57
60
58
61
const response = await new OutputRequest (
59
- https,
60
62
new InputResponse (),
63
+ requestFunction,
61
64
{
62
65
url: ' https://example.com' ,
63
66
method: ' POST' ,
@@ -69,14 +72,115 @@ console.log(response.body().toString());
69
72
70
73
// or
71
74
72
- const request = new OutputRequest (https, new InputResponse ());
75
+ const request = new OutputRequest (new InputResponse (), requestFunction );
73
76
74
77
const otherResponse = await (request
75
78
.copy ({
76
79
url: ' https://example.com' ,
77
80
method: ' POST' ,
78
81
body: ' test body'
79
82
}))
80
- .send ()
83
+ .send ();
84
+
85
+ console .log (response .body ().toString ());
86
+ ```
87
+
88
+
89
+ ## [ Bun] ( https://bun.sh ) support
90
+
91
+ ` server ` and ` client ` packages support Bun by default.
92
+ But there ara special ` bun ` package with native [ Bun API] ( https://bun.sh/docs/runtime/bun-apis ) implementation (like ` Bun.serve() ` ).
93
+ And you should replace ` node:http ` package with ` objective-http.bun.bunttp ` in your ` Server ` configuration.
94
+ [ Don't use] ( https://bun.sh/docs/runtime/nodejs-apis#node-cluster ) ` ClusteredServer ` with ` Bun ` !!!
95
+
96
+
97
+ ### Server Bun usage
98
+
99
+ It should work with ` node ` and ` bun ` :
100
+
101
+ ``` javascript
102
+ const http = require (' node:http' );
103
+
104
+ const {
105
+ Server ,
106
+ LoggedServer ,
107
+ InputRequest ,
108
+ JsonInputRequest ,
109
+ LoggedInputRequest ,
110
+ OutputResponse ,
111
+ JsonOutputResponse ,
112
+ LoggedOutputResponse ,
113
+ Endpoint ,
114
+ LoggedEndpoint ,
115
+ Endpoints
116
+ } = require (' objective-http' ).server ;
117
+
118
+ new LoggedServer (
119
+ new Server (
120
+ new Endpoints ([
121
+ new MyFirstEndpoint (new LoggedEndpoint (new Endpoint (), console )),
122
+ new MySecondEndpoint (new LoggedEndpoint (new Endpoint (), console )),
123
+ new MyThirdEndpoint (new LoggedEndpoint (new Endpoint (), console ))
124
+ ]),
125
+ {port: server_port},
126
+ new LoggedInputRequest (new JsonInputRequest (new InputRequest ()), console ),
127
+ new LoggedOutputResponse (new JsonOutputResponse (new OutputResponse ()), console ),
128
+ http
129
+ ),
130
+ console
131
+ ).start ()
132
+ ```
133
+
134
+ In order for the code to be executed only by ` bun ` (with ` Bun API ` inside), you need to make changes to the import block.
135
+ ` bun ` package redeclare only ` InputRequest ` and ` OutputResponse ` classes. Other classes taken from ` server ` package.
81
136
137
+ ``` javascript
138
+ const http = require (' objective-http' ).bun .bunttp ;
139
+
140
+ const {
141
+ Server ,
142
+ LoggedServer ,
143
+ InputRequest ,
144
+ JsonInputRequest ,
145
+ LoggedInputRequest ,
146
+ OutputResponse ,
147
+ JsonOutputResponse ,
148
+ LoggedOutputResponse ,
149
+ Endpoint ,
150
+ LoggedEndpoint ,
151
+ Endpoints
152
+ } = require (' objective-http' ).bun .server ;
153
+ ```
154
+
155
+
156
+ ### Client Bun usage
157
+
158
+ It should work with ` node ` and ` bun ` :
159
+
160
+ ``` javascript
161
+ const http = require (' node:http' );
162
+ const requestFunction = http .request ;
163
+ const {
164
+ OutputRequest ,
165
+ InputResponse
166
+ } = require (' objective-http' ).client ;
167
+
168
+ await (new OutputRequest (new InputResponse (), requestFunction)
169
+ .copy ({
170
+ url: ' https://example.com' ,
171
+ method: ' POST' ,
172
+ body: ' test body'
173
+ }))
174
+ .send ();
175
+ ```
176
+
177
+ In order for the code to be executed only by ` bun ` , you need to make changes to the import block.
178
+
179
+ ``` javascript
180
+ const http = require (' objective-http' ).bun .bunttp ;
181
+ const requestFunction = http .request ;
182
+ const {
183
+ OutputRequest ,
184
+ InputResponse
185
+ } = require (' objective-http' ).bun .client ;
82
186
```
0 commit comments