4545 < script >
4646
4747
48- var snippet ;
48+ var simple = { } ;
49+ simple . server = { } ;
50+ simple . root ;
51+ simple . iframe ;
52+ simple . on = { } ;
53+
54+ var minimal = { } ;
55+ minimal . server = { } ;
56+ minimal . root ;
57+ minimal . iframe ;
58+ minimal . on = { } ;
4959
5060
5161 async function start ( ) {
5262
53- snippet = mod . snippet ;
63+ simple . snippet = mod . simple ;
64+ simple . snippet . initmod ( { on :simple . on } ) ;
5465
55- snippet . initmod ( { on} ) ;
66+ minimal . snippet = mod . minimal ;
67+ minimal . snippet . initmod ( { on :minimal . on } ) ;
5668
5769
5870 initdom ( document . body ) ;
6880
6981 < style >
7082
71- # snippet -root
83+ . example -root
7284 {border : 1px solid lightblue;padding : 10px }
73- # snippet -root> div
85+ . example -root> div
7486 {margin : 10px }
7587
76-
7788 # web-page
7889 {display : flex;flex-direction : column;gap : 10px ;margin-top : 30px }
7990
101112 < h1 class =title >
102113 How To Set Up A Basic HTTP Server In Node.js
103114 </ h1 >
104- < time slot =date datetime =2025-10-15 >
105- 18 Oct 2025
115+ < time slot =date datetime =2026-01-18 >
116+ 18 Jan 2026
106117 </ time >
107118 </ blog-hdr >
108119
@@ -113,7 +124,7 @@ <h1 class=title>
113124 </ p >
114125
115126
116- < div id =snippet -root>
127+ < div id =simple-root class = example -root>
117128
118129 < div class =blog-text >
119130
@@ -136,6 +147,13 @@ <h4 class=blog-hdr>
136147 < p >
137148 The mime function will need to built up if it were required.
138149 </ p >
150+ < p >
151+ The server is typically accessed via
152+ < br >
153+ < a href ='http://localhost:3001/hello ' target ='_blank '>
154+ http://localhost:3001/hello
155+ </ a >
156+ </ p >
139157
140158 < div id =btns >
141159 < input value =download type =button >
@@ -144,33 +162,83 @@ <h4 class=blog-hdr>
144162 </ div >
145163
146164
165+ < snippet-terminal-console component id =simple type =nodejs src ='ex/http-server-simple-example.js ' web-console ='h=100 '> </ snippet-terminal-console >
166+
167+
168+ < div id =web-page >
169+ < div id =web-page-hdr >
170+ < img id =web-page-go src ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAfCAMAAADHso01AAAARVBMVEVHcEwGBuEGBuEJCdQCAvQFBegDA/ACAvYEBOwBAfgEBeoDBO4BAfgBAvYHCNsNDMEEBeoCAvMCAvQFBuQDBe8AAP4AAfx2UBTrAAAAFXRSTlMANikQ0lym33zxaov36BoGTrnIQZUTyCZ3AAABHUlEQVQoz41T2Q7DIAwjlJty9Mr/f+oWoB2snbQ8ITmXY8PYvzGBNN4bCdMDyM1qEY/jQLsa/l1pdMFKIGozdODLhbWEBaiooiBGlEIA23wqtSeKJdpbmLAQPClsE5WT0imNZ+5K3V0tsL7ty71t+SIyFqk1YpCfTWWoDQiWVIyz7Jm4CmvOUpmMKg0863qBv3uXwVuHXjwDMLD0WPsrgVm0JYrvojwTrMYbp7g5JazNTBZ4f1aQP1d3g+6z+3jYnIZDI5rUceNNd/OtnywkZ9ejOSCq2HUfbp41sV6qRK7s/lEsmqoIVra93jm7vbkOxSmwuCyC82kr1HDToDOj3gan4mBUXOHb5x0cfHz8JUVG4eHHH9t377bp72/5Al4LH5UQD4MbAAAAAElFTkSuQmCC '>
171+ < input id =web-page-url >
172+ </ div >
173+ < iframe > </ iframe >
174+ </ div >
147175
148- < snippet-terminal-console component id =snippet type =nodejs src ='ex/http-server-simple-example.js ' web-console ='h=100 '> </ snippet-terminal-console >
149176
150177 </ div >
151178
152- < div id =web-page >
153- < div id =web-page-hdr >
154- < input id =web-page-url >
155- < img id =web-page-go src ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAfCAMAAADHso01AAAARVBMVEVHcEwGBuEGBuEJCdQCAvQFBegDA/ACAvYEBOwBAfgEBeoDBO4BAfgBAvYHCNsNDMEEBeoCAvMCAvQFBuQDBe8AAP4AAfx2UBTrAAAAFXRSTlMANikQ0lym33zxaov36BoGTrnIQZUTyCZ3AAABHUlEQVQoz41T2Q7DIAwjlJty9Mr/f+oWoB2snbQ8ITmXY8PYvzGBNN4bCdMDyM1qEY/jQLsa/l1pdMFKIGozdODLhbWEBaiooiBGlEIA23wqtSeKJdpbmLAQPClsE5WT0imNZ+5K3V0tsL7ty71t+SIyFqk1YpCfTWWoDQiWVIyz7Jm4CmvOUpmMKg0863qBv3uXwVuHXjwDMLD0WPsrgVm0JYrvojwTrMYbp7g5JazNTBZ4f1aQP1d3g+6z+3jYnIZDI5rUceNNd/OtnywkZ9ejOSCq2HUfbp41sV6qRK7s/lEsmqoIVra93jm7vbkOxSmwuCyC82kr1HDToDOj3gan4mBUXOHb5x0cfHz8JUVG4eHHH9t377bp72/5Al4LH5UQD4MbAAAAAElFTkSuQmCC '>
179+
180+
181+
182+ < div id =minimal-root class =example-root >
183+
184+ < div class =blog-text >
185+
186+ < h4 class =blog-hdr >
187+ http-server-minimal.js
188+ </ h4 >
189+
190+ < p >
191+ This example demonstrates a minimal https server. It has built in https certificate.
192+ </ p >
193+ < p >
194+ It serves files local to the base directory where the server was run and produces
195+ a 400 badrequest when the requested url maps to a directory outside the directory where the server is located
196+ such as '../test.txt'.
197+ </ p >
198+ < p >
199+ It produces a 404 Not Found should the request url not exists.
200+ </ p >
201+ < p >
202+ The mime function will need to built up if it were required.
203+ </ p >
204+ < p >
205+ The server is typically accessed via
206+ < br >
207+ < a href ='http://localhost:3002/hello ' target ='_blank '>
208+ http://localhost:3002/hello
209+ </ a >
210+ </ p >
211+
212+ < div id =btns >
213+ < input value =download type =button >
214+ </ div >
215+
156216 </ div >
157- < iframe > </ iframe >
217+
218+
219+ < snippet-terminal-console component id =minimal type =nodejs src ='ex/http-server-minimal.js ' web-console ='h=100 '> </ snippet-terminal-console >
220+
221+
222+ < div id =web-page >
223+ < div id =web-page-hdr >
224+ < img id =web-page-go src ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAfCAMAAADHso01AAAARVBMVEVHcEwGBuEGBuEJCdQCAvQFBegDA/ACAvYEBOwBAfgEBeoDBO4BAfgBAvYHCNsNDMEEBeoCAvMCAvQFBuQDBe8AAP4AAfx2UBTrAAAAFXRSTlMANikQ0lym33zxaov36BoGTrnIQZUTyCZ3AAABHUlEQVQoz41T2Q7DIAwjlJty9Mr/f+oWoB2snbQ8ITmXY8PYvzGBNN4bCdMDyM1qEY/jQLsa/l1pdMFKIGozdODLhbWEBaiooiBGlEIA23wqtSeKJdpbmLAQPClsE5WT0imNZ+5K3V0tsL7ty71t+SIyFqk1YpCfTWWoDQiWVIyz7Jm4CmvOUpmMKg0863qBv3uXwVuHXjwDMLD0WPsrgVm0JYrvojwTrMYbp7g5JazNTBZ4f1aQP1d3g+6z+3jYnIZDI5rUceNNd/OtnywkZ9ejOSCq2HUfbp41sV6qRK7s/lEsmqoIVra93jm7vbkOxSmwuCyC82kr1HDToDOj3gan4mBUXOHb5x0cfHz8JUVG4eHHH9t377bp72/5Al4LH5UQD4MbAAAAAElFTkSuQmCC '>
225+ < input id =web-page-url >
226+ </ div >
227+ < iframe > </ iframe >
228+ </ div >
229+
230+
158231 </ div >
159232
160233
234+
161235 </ body >
162236
163237 < script >
164238
165- var server = { } ;
166- server . url = null ;
167- server . port = null ;
168-
169- var iframe ;
170-
171-
239+
240+
172241 var btn = { } ;
173- var on = { } ;
174242
175243
176244 //:
@@ -179,12 +247,16 @@ <h4 class=blog-hdr>
179247 function initdom ( rootnode ) {
180248
181249
182- $ ( '[value=download]' ) . onclick = btn . download ;
183-
250+ simple . root = $ ( '#simple-root' ) ;
251+ $ ( simple . root , '[value=download]' ) . onclick = btn . download ;
252+ $ ( simple . root , '#web-page-go' ) . onclick = btn . go ;
253+ simple . iframe = $ ( simple . root , 'iframe' ) ;
184254
185- $ ( '#web-page-go' ) . onclick = btn . go ;
186255
187- iframe = $ ( 'iframe' ) ;
256+ minimal . root = $ ( '#minimal-root' ) ;
257+ $ ( minimal . root , '[value=download]' ) . onclick = btn . download ;
258+ $ ( minimal . root , '#web-page-go' ) . onclick = btn . go ;
259+ minimal . iframe = $ ( minimal . root , 'iframe' ) ;
188260
189261
190262 } //initdom
@@ -193,9 +265,24 @@ <h4 class=blog-hdr>
193265 //:
194266
195267
196- btn . download = function ( ) {
268+ function find ( name ) {
269+
270+ switch ( name ) {
271+
272+ case 'simple' : return simple ;
273+
274+ } //switch
275+
276+ } //find
277+
197278
198- var txt = snippet . editor . getvalue ( ) ;
279+ btn . download = function ( e ) {
280+
281+ var root = e . target . closest ( '.example-root' ) ;
282+ var name = root . id . split ( '-' ) . at ( 0 ) ;
283+ var ex = find ( name ) ;
284+
285+ var txt = ex . snippet . editor . getvalue ( ) ;
199286 var blob = new Blob ( [ txt ] ) ;
200287 var url = window . URL . createObjectURL ( blob ) ;
201288
@@ -207,26 +294,43 @@ <h4 class=blog-hdr>
207294 } //download
208295
209296
210- btn . go = function ( ) {
297+ btn . go = function ( e ) {
211298
212- var path = $ ( '#web-page-url' ) . value ;
213- iframe . src = `${ server . url } ${ path } ` ;
299+ var root = e . target . closest ( '.example-root' ) ;
300+ var name = root . id . split ( '-' ) . at ( 0 ) ;
301+ var ex = find ( name ) ;
302+
303+ var path = $ ( ex . root , '#web-page-url' ) . value ;
304+ ex . iframe . src = `${ ex . server . url } ${ path } ` ;
214305
215306 } //go
216307
217308
218309 //:
219310
220311
221- on [ 'server-ready' ] = function ( { url, port} ) {
312+ simple . on [ 'server-ready' ] = function ( { url, port} ) {
313+ console . log ( 'server-ready' , url , port ) ;
314+ simple . server . url = url ;
315+ simple . server . port = port ;
316+
317+ var path = '/hello' ;
318+ $ ( simple . root , '#web-page-url' ) . value = path ;
319+
320+ simple . iframe . src = `${ url } ${ path } ` ;
321+
322+ } //server-ready
323+
324+
325+ minimal . on [ 'server-ready' ] = function ( { url, port} ) {
222326 console . log ( 'server-ready' , url , port ) ;
223- server . url = url ;
224- server . port = port ;
327+ minimal . server . url = url ;
328+ minimal . server . port = port ;
225329
226- var path = '/hello' ;
227- $ ( '#web-page-url' ) . value = path ;
330+ var path = '/hello' ;
331+ $ ( minimal . root , '#web-page-url' ) . value = path ;
228332
229- iframe . src = `${ url } ${ path } ` ;
333+ minimal . iframe . src = `${ url } ${ path } ` ;
230334
231335 } //server-ready
232336
0 commit comments