Change the server setup to use Express.js for hosting

This commit is contained in:
2025-08-26 11:02:03 -07:00
parent 8b8aae3ff9
commit 9856719e38
3 changed files with 56 additions and 28 deletions

34
package-lock.json generated
View File

@@ -21,6 +21,7 @@
"@graphql-codegen/typescript": "4.1.2", "@graphql-codegen/typescript": "4.1.2",
"@graphql-codegen/typescript-resolvers": "4.4.1", "@graphql-codegen/typescript-resolvers": "4.4.1",
"@jest/globals": "^29.7.0", "@jest/globals": "^29.7.0",
"@types/express": "^5.0.3",
"@types/jsonwebtoken": "^9.0.8", "@types/jsonwebtoken": "^9.0.8",
"@types/node": "^22.10.2", "@types/node": "^22.10.2",
"@types/redis": "^4.0.11", "@types/redis": "^4.0.11",
@@ -125,6 +126,17 @@
"graphql": "14.x || 15.x || 16.x" "graphql": "14.x || 15.x || 16.x"
} }
}, },
"node_modules/@apollo/server/node_modules/@types/express": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz",
"integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==",
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
"@types/qs": "*",
"@types/serve-static": "*"
}
},
"node_modules/@apollo/server/node_modules/accepts": { "node_modules/@apollo/server/node_modules/accepts": {
"version": "1.3.8", "version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -2955,13 +2967,13 @@
} }
}, },
"node_modules/@types/express": { "node_modules/@types/express": {
"version": "4.17.23", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz",
"integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==",
"dev": true,
"dependencies": { "dependencies": {
"@types/body-parser": "*", "@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33", "@types/express-serve-static-core": "^5.0.0",
"@types/qs": "*",
"@types/serve-static": "*" "@types/serve-static": "*"
} }
}, },
@@ -2976,6 +2988,18 @@
"@types/send": "*" "@types/send": "*"
} }
}, },
"node_modules/@types/express/node_modules/@types/express-serve-static-core": {
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz",
"integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
"@types/qs": "*",
"@types/range-parser": "*",
"@types/send": "*"
}
},
"node_modules/@types/graceful-fs": { "node_modules/@types/graceful-fs": {
"version": "4.1.9", "version": "4.1.9",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",

View File

@@ -19,6 +19,7 @@
"@types/jsonwebtoken": "^9.0.8", "@types/jsonwebtoken": "^9.0.8",
"@types/node": "^22.10.2", "@types/node": "^22.10.2",
"@types/redis": "^4.0.11", "@types/redis": "^4.0.11",
"@types/express": "^5.0.3",
"jest": "^29.7.0", "jest": "^29.7.0",
"ts-jest": "^29.2.5", "ts-jest": "^29.2.5",
"typescript": "^5.7.2" "typescript": "^5.7.2"

View File

@@ -1,13 +1,11 @@
import { readFileSync } from "fs"; import { readFileSync } from "fs";
import { ApolloServer } from "@apollo/server"; import { ApolloServer } from "@apollo/server";
import { startStandaloneServer } from "@apollo/server/standalone";
import { MergedResolvers } from "./MergedResolvers"; import { MergedResolvers } from "./MergedResolvers";
import { ServerContext } from "./ServerContext"; import { ServerContext } from "./ServerContext";
import { loadShuttleTestData } from "./loaders/shuttle/loadShuttleTestData";
import { InterchangeSystem, InterchangeSystemBuilderArguments } from "./entities/InterchangeSystem"; import { InterchangeSystem, InterchangeSystemBuilderArguments } from "./entities/InterchangeSystem";
import { ChapmanApiBasedParkingRepositoryLoader } from "./loaders/parking/ChapmanApiBasedParkingRepositoryLoader"; import { ChapmanApiBasedParkingRepositoryLoader } from "./loaders/parking/ChapmanApiBasedParkingRepositoryLoader";
import { supportedIntegrationTestSystems } from "./loaders/supportedIntegrationTestSystems"; import express from "express";
import { loadParkingTestData } from "./loaders/parking/loadParkingTestData"; import { expressMiddleware } from "@as-integrations/express5";
const typeDefs = readFileSync("./schema.graphqls", "utf8"); const typeDefs = readFileSync("./schema.graphqls", "utf8");
@@ -27,6 +25,7 @@ async function main() {
resolvers: MergedResolvers, resolvers: MergedResolvers,
introspection: process.env.NODE_ENV !== "production", introspection: process.env.NODE_ENV !== "production",
}); });
await server.start();
let systems: InterchangeSystem[]; let systems: InterchangeSystem[];
@@ -36,26 +35,30 @@ async function main() {
}, },
)); ));
const { url } = await startStandaloneServer(server, { const app = express();
listen: { app.use(
port: process.env.PORT ? parseInt(process.env.PORT) : 4000, "/",
}, express.json(),
context: async () => { expressMiddleware(server, {
return { context: async () => {
systems, return {
findSystemById: (id: string) => { systems,
const system = systems.find((system) => system.id === id); findSystemById: (id: string) => {
if (!system) { const system = systems.find((system) => system.id === id);
return null; if (!system) {
} return null;
return system; }
}, return system;
} },
}, }
},
})
);
const port = process.env.PORT ? parseInt(process.env.PORT) : 4000;
app.listen(port, () => {
console.log(`Server ready at port ${port}`);
}); });
console.log(`Server ready at: ${url}`);
} }
main(); main();