-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathexpress.entrypoint.ts
More file actions
66 lines (58 loc) · 2.11 KB
/
express.entrypoint.ts
File metadata and controls
66 lines (58 loc) · 2.11 KB
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
import {type NextFunction, type Request, type Response, Router} from "express"
import {bootstrap} from "./generated/server/express/index.ts"
import {createEscapeHatchesRouter} from "./routes/express/escape-hatches.ts"
import {createMediaTypesRouter} from "./routes/express/media-types.ts"
import {createQueryParametersRouter} from "./routes/express/query-parameters.ts"
import {createRequestHeadersRouter} from "./routes/express/request-headers.ts"
import {createRouteMatchingRouter} from "./routes/express/route-matching.ts"
import {createValidationRouter} from "./routes/express/validation.ts"
import {createErrorResponse} from "./shared.ts"
function createRouter() {
const router = Router()
const requestHeadersRouter = createRequestHeadersRouter()
const validationRouter = createValidationRouter()
const escapeHatchesRouter = createEscapeHatchesRouter()
const mediaTypesRouter = createMediaTypesRouter()
const queryParametersRouter = createQueryParametersRouter()
const routeMatchingRouter = createRouteMatchingRouter()
router.use(requestHeadersRouter)
router.use(validationRouter)
router.use(escapeHatchesRouter)
router.use(mediaTypesRouter)
router.use(queryParametersRouter)
router.use(routeMatchingRouter)
return router
}
export async function startExpressServer() {
const {app, server, address} = await bootstrap({
cors: {
credentials: true,
allowedHeaders: ["Authorization", "Content-Type"],
methods: ["GET", "OPTIONS"],
origin: "http://example.com",
},
router: createRouter(),
notFoundHandler: (_req: Request, res: Response, _next: NextFunction) => {
res.status(404).json({code: 404, message: "route not found"})
},
errorHandler: (
err: Error,
_req: Request,
res: Response,
next: NextFunction,
) => {
if (res.headersSent) {
return next(err)
}
const {status, body} = createErrorResponse(err)
res.status(status).json(body)
},
})
return {app, server, address}
}
if (require.main === module) {
startExpressServer().catch((err) => {
console.error("fatal error", err)
process.exit(1)
})
}