-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathexpress.entrypoint.ts
More file actions
57 lines (49 loc) · 1.6 KB
/
express.entrypoint.ts
File metadata and controls
57 lines (49 loc) · 1.6 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
import {type NextFunction, type Request, type Response, Router} from "express"
import {bootstrap} from "./generated/server/express"
import {createEscapeHatchesRouter} from "./routes/express/escape-hatches"
import {createRequestHeadersRouter} from "./routes/express/request-headers"
import {createValidationRouter} from "./routes/express/validation"
import {createErrorResponse} from "./shared"
function createRouter() {
const router = Router()
const requestHeadersRouter = createRequestHeadersRouter()
const validationRouter = createValidationRouter()
const escapeHatchesRouter = createEscapeHatchesRouter()
router.use(requestHeadersRouter)
router.use(validationRouter)
router.use(escapeHatchesRouter)
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)
})
}