FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
CommunitySolidServer/src/server/HandlerServerConfigurator.ts at main · timgent/CommunitySolidServer · GitHub
timgent
/
CommunitySolidServer
Public
forked from
CommunitySolidServer/CommunitySolidServer
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
1
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
CommunitySolidServer
/
src
/
server
/
HandlerServerConfigurator.ts
Copy path
More file actions
More file actions
Latest commit
History
History
History
71 lines (66 loc) · 2.59 KB
Breadcrumbs
CommunitySolidServer
/
src
/
server
/
HandlerServerConfigurator.ts
Copy path
File metadata and controls
71 lines (66 loc) · 2.59 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import
type
{
IncomingMessage
,
Server
,
ServerResponse
}
from
'node:http'
;
import
{
getLoggerFor
}
from
'../logging/LogUtil'
;
import
{
isError
}
from
'../util/errors/ErrorUtil'
;
import
{
guardStream
}
from
'../util/GuardedStream'
;
import
type
{
HttpHandler
}
from
'./HttpHandler'
;
import
{
ServerConfigurator
}
from
'./ServerConfigurator'
;
/**
* A {
@link
ServerConfigurator} that attaches an {
@link
HttpHandler} to the `request` event of a {
@link
Server}.
* All incoming requests will be sent to the provided handler.
* Failsafes are added to make sure a valid response is sent in case something goes wrong.
*
* The `showStackTrace` parameter can be used to add stack traces to error outputs.
*/
export
class
HandlerServerConfigurator
extends
ServerConfigurator
{
protected
readonly
logger
=
getLoggerFor
(
this
)
;
protected
readonly
errorLogger
=
(
error
:
Error
)
:
void
=>
{
this
.
logger
.
error
(
`Request error:
${
error
.
message
}
`
)
;
}
;
/** The main HttpHandler */
private
readonly
handler
:
HttpHandler
;
private
readonly
showStackTrace
:
boolean
;
public
constructor
(
handler
:
HttpHandler
,
showStackTrace
=
false
)
{
super
(
)
;
this
.
handler
=
handler
;
this
.
showStackTrace
=
showStackTrace
;
}
public
async
handle
(
server
:
Server
)
:
Promise
<
void
>
{
server
.
on
(
'request'
,
// eslint-disable-next-line @typescript-eslint/no-misused-promises
async
(
request
:
IncomingMessage
,
response
:
ServerResponse
)
:
Promise
<
void
>
=>
{
try
{
this
.
logger
.
info
(
`Received
${
request
.
method
}
request for
${
request
.
url
}
`
)
;
const
guardedRequest
=
guardStream
(
request
)
;
guardedRequest
.
on
(
'error'
,
this
.
errorLogger
)
;
await
this
.
handler
.
handleSafe
(
{
request
:
guardedRequest
,
response
}
)
;
}
catch
(
error
:
unknown
)
{
const
errMsg
=
this
.
createErrorMessage
(
error
)
;
this
.
logger
.
error
(
errMsg
)
;
if
(
response
.
headersSent
)
{
response
.
end
(
)
;
}
else
{
response
.
setHeader
(
'Content-Type'
,
'text/plain; charset=utf-8'
)
;
response
.
writeHead
(
500
)
.
end
(
errMsg
)
;
}
}
finally
{
if
(
!
response
.
headersSent
)
{
response
.
writeHead
(
404
)
.
end
(
)
;
}
}
}
,
)
;
}
/**
* Creates a readable error message based on the error and the `showStackTrace` parameter.
*/
private
createErrorMessage
(
error
:
unknown
)
:
string
{
if
(
!
isError
(
error
)
)
{
return
`Unknown error:
${
error
as
string
}
.\n`
;
}
if
(
this
.
showStackTrace
&&
isError
(
error
)
&&
error
.
stack
)
{
return
`
${
error
.
stack
}
\n`
;
}
return
`
${
error
.
name
}
:
${
error
.
message
}
\n`
;
}
}
Back
|
FazBrowse Home
|
New Git URL