- JWT based user authentication with jsonwebtoken and express-jwt.
- Dependency Injection with TypeDI.
- ORM with support for many databases (MySQL, PostgreSQL, MariaDB, SQLite, MongoDB, and more) with TypeORM.
- Clear and organised structure with different layers such as entities, services, middlewares, loaders, etc.
- Validation thanks to class-validator.
- Unit and Integration Testing with Jest.
- Security Features with Helmet.
- Role-based access control using a custom-built middleware.
- Simple Data Seeding with custom-built factories and Faker.js.
- Code generator for entity, service, route, factory, seed, test with a custom-built generator script and CLI tool Commander.
Install Node.js and NPM
Install a MongoDB server or use MongoDB Atlas
Fork or download this project and modify package.json
for your new project.
Make a copy of the .env.example
file and rename it to .env
.
Create a new database and add the connection string in the .env
file.
Install the required packages.
npm install
This installs all the dependencies with NPM.
Now your development environment should be ready to use!
Go to the root directory and start your app with this npm script.
npm run dev
This starts a local server using
nodemon
andts-node
. The server base endpoint will behttp://127.0.0.1:3000
where3000
is the PORT variable you set in the.env
file.
- Install all dependencies with
npm install
- Run code syntax and format checking using
npm run lint
which runs eslint. - Automatically fix lint errors with
npm run lint:fix
.
- Run
npm run dev
to start nodemon with ts-node. - The server base endpoint will be
http://127.0.0.1:3000
where3000
is the PORT variable you set in the.env
file.
- Run
npm run build
to compile all the Typescript sources and generate JavaScript files. - To start the built app located in
build
usenpm start
.
The route prefix is /api
by default, but you can change this in the .env file.
Route | Description |
---|---|
/api | Base endpoint |
/api/auth/login | Auth - login endpoint |
/api/auth/register | Auth - register endpoint |
/api/user | Example entity endpoint - returns all users |
/api/user/current | Example entity endpoint - returns current logged in user |
... | ... |
Name | Description |
---|---|
database/ | Local database server data |
build/ | Compiled source files will be placed here |
commands/ | Custom CLI command tools used with npm scripts |
src/ | Source files |
src/api/middlewares/ | Custom middlewares |
src/api/entities/ | TypeORM Entities (Database models) |
src/api/services/ | Service layer |
src/config/ | The configuration file which loads env variables |
src/database/factories | Factories generate entities with mock data |
src/database/seeds | Seeds use factories to save mock data in the database |
src/loaders/ | Loader is where the app is configured and database is loaded |
src/types/ *.d.ts | Custom type definitions |
test *.spec.ts | Unit and integration tests |
.env.example | Environment configurations |
docker-compose.yml | docker dev-env configurations |
For logging we use winston.