init
This commit is contained in:
50
src/app.js
Normal file
50
src/app.js
Normal file
@@ -0,0 +1,50 @@
|
||||
const cors = require("cors");
|
||||
const express = require("express");
|
||||
const swaggerUi = require("swagger-ui-express");
|
||||
const { pingMongo } = require("./db/client");
|
||||
const { router: apiRouter } = require("./routes/api");
|
||||
const { openApiDocument } = require("./swagger/openapi");
|
||||
|
||||
function createApp() {
|
||||
const app = express();
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.json({ limit: "2mb" }));
|
||||
|
||||
app.get("/", (request, response) => {
|
||||
response.redirect("/docs");
|
||||
});
|
||||
|
||||
app.get("/health", async (request, response) => {
|
||||
try {
|
||||
await pingMongo();
|
||||
response.json({ ok: true, mongo: "connected" });
|
||||
} catch (error) {
|
||||
response
|
||||
.status(503)
|
||||
.json({ ok: false, mongo: "unavailable", error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.get("/openapi.json", (request, response) => {
|
||||
response.json(openApiDocument);
|
||||
});
|
||||
|
||||
app.use("/docs", swaggerUi.serve, swaggerUi.setup(openApiDocument));
|
||||
app.use("/api", apiRouter);
|
||||
|
||||
app.use((request, response) => {
|
||||
response.status(404).json({ error: "Not found" });
|
||||
});
|
||||
|
||||
app.use((error, request, response, next) => {
|
||||
const status = error.status || 500;
|
||||
response
|
||||
.status(status)
|
||||
.json({ error: error.message || "Internal server error" });
|
||||
});
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
module.exports = { createApp };
|
||||
Reference in New Issue
Block a user