Express + TypeScript + Prisma (MySQL) starter API.
- Node.js 22.21.1 (from
.nvmrc) - npm
- MySQL database
- Install dependencies:
npm install- Create your environment file:
# Windows PowerShell
Copy-Item .env.example .env
# macOS/Linux
cp .env.example .env- Update
.envwith your values:
PORT=3000
NODE_ENV=development
DATABASE_URL="mysql://USER:PASSWORD@HOST:3306/DATABASE_NAME"
# Optional (only if you use split DB settings in custom code)
DATABASE_USER=
DATABASE_PASSWORD=
DATABASE_NAME=
DATABASE_HOST=Environment variable rules:
- Required:
DATABASE_URL(used by Prisma viaprisma.config.ts) - Optional:
PORT(defaults to3000) - Optional:
NODE_ENV(defaults todevelopment) - Optional:
DATABASE_USER,DATABASE_PASSWORD,DATABASE_NAME,DATABASE_HOST(available in env config, not required by Prisma setup)
- Generate Prisma client:
npm run prisma:generate- Run database migrations (development):
npm run prisma:migrate- Start development server:
npm run devThe dev server runs with nodemon + tsx and starts from server/bin/www.ts.
npm run dev- Start dev server with auto-reloadnpm run build- Build TypeScript outputnpm run start- Start compiled servernpm run prisma:generate- Generate Prisma clientnpm run prisma:migrate- Create/apply Prisma migration (dev)npm run generate- Run code scaffolding script
This project includes a scaffolder at server/src/scripts/scaffolding.ts.
Generate module files using path format:
npm run generate -- v1/userThis creates files under these layer folders (default):
controllersservicesroutesvalidations
npm run generate -- --dir v1 --name userThis is equivalent to v1/user.
Use one or more layer flags:
npm run generate -- v1/user --controllers --routesSupported layer flags:
--controllersor--controller--servicesor--service--repositoriesor--repository--routesor--route--validationsor--validation
# Generate admin/product module with default layers
npm run generate -- admin/product
# Generate only repository + service
npm run generate -- admin/product --repositories --servicesnpm run build
npm run startCurrent versioned routes are mounted under:
/v1