Add rudimentary command line parsing to express app
This commit is contained in:
@@ -3,6 +3,7 @@ import express, {
|
||||
Response as ExpressResponse,
|
||||
} from "express";
|
||||
import { match } from "path-to-regexp";
|
||||
import { cli } from "./cli";
|
||||
import { contentTypes } from "./content-types";
|
||||
import { httpCodes } from "./http-codes";
|
||||
import { routes } from "./routes";
|
||||
@@ -117,4 +118,6 @@ app.use(async (req: ExpressRequest, res: ExpressResponse) => {
|
||||
res.status(code).send(result);
|
||||
});
|
||||
|
||||
app.listen(3000);
|
||||
app.listen(cli.listen.port, cli.listen.host, () => {
|
||||
console.log(`Listening on ${cli.listen.host}:${cli.listen.port}`);
|
||||
});
|
||||
|
||||
49
express/cli.ts
Normal file
49
express/cli.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { parseArgs } from "node:util";
|
||||
|
||||
const { values } = parseArgs({
|
||||
options: {
|
||||
listen: {
|
||||
type: "string",
|
||||
short: "l",
|
||||
},
|
||||
},
|
||||
strict: true,
|
||||
allowPositionals: false,
|
||||
});
|
||||
|
||||
function parseListenAddress(listen: string | undefined): {
|
||||
host: string;
|
||||
port: number;
|
||||
} {
|
||||
const defaultHost = "127.0.0.1";
|
||||
const defaultPort = 3000;
|
||||
|
||||
if (!listen) {
|
||||
return { host: defaultHost, port: defaultPort };
|
||||
}
|
||||
|
||||
const lastColon = listen.lastIndexOf(":");
|
||||
if (lastColon === -1) {
|
||||
// Just a port number
|
||||
const port = parseInt(listen, 10);
|
||||
if (isNaN(port)) {
|
||||
throw new Error(`Invalid listen address: ${listen}`);
|
||||
}
|
||||
return { host: defaultHost, port };
|
||||
}
|
||||
|
||||
const host = listen.slice(0, lastColon);
|
||||
const port = parseInt(listen.slice(lastColon + 1), 10);
|
||||
|
||||
if (isNaN(port)) {
|
||||
throw new Error(`Invalid port in listen address: ${listen}`);
|
||||
}
|
||||
|
||||
return { host, port };
|
||||
}
|
||||
|
||||
const listenAddress = parseListenAddress(values.listen);
|
||||
|
||||
export const cli = {
|
||||
listen: listenAddress,
|
||||
};
|
||||
@@ -6,4 +6,4 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
cd "$DIR"
|
||||
|
||||
exec ../cmd node dist/index.js
|
||||
exec ../cmd node dist/index.js "$@"
|
||||
|
||||
Reference in New Issue
Block a user