{"id":13452490,"url":"https://github.com/w3tecch/express-typescript-boilerplate","last_synced_at":"2025-05-14T19:07:35.629Z","repository":{"id":37431808,"uuid":"89909577","full_name":"w3tecch/express-typescript-boilerplate","owner":"w3tecch","description":"A delightful way to building a RESTful API with NodeJs \u0026 TypeScript by @w3tecch","archived":false,"fork":false,"pushed_at":"2023-05-07T10:26:52.000Z","size":1930,"stargazers_count":3351,"open_issues_count":98,"forks_count":914,"subscribers_count":60,"default_branch":"develop","last_synced_at":"2025-04-13T13:23:49.752Z","etag":null,"topics":["annotations","boilerplate","database","documentation","e2e-tests","express-typescript-boilerplate","expressjs","ioc","jest","migrations","monitoring","nodejs","restful-api","seed","seeding","skeleton","starter-kit","typescript","validation"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/w3tecch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-05-01T08:42:53.000Z","updated_at":"2025-04-12T08:32:32.000Z","dependencies_parsed_at":"2024-01-12T20:49:58.212Z","dependency_job_id":"09e897c4-9502-4d51-951e-0dc1d35c2e87","html_url":"https://github.com/w3tecch/express-typescript-boilerplate","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3tecch%2Fexpress-typescript-boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3tecch%2Fexpress-typescript-boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3tecch%2Fexpress-typescript-boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3tecch%2Fexpress-typescript-boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/w3tecch","download_url":"https://codeload.github.com/w3tecch/express-typescript-boilerplate/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254209859,"owners_count":22032897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotations","boilerplate","database","documentation","e2e-tests","express-typescript-boilerplate","expressjs","ioc","jest","migrations","monitoring","nodejs","restful-api","seed","seeding","skeleton","starter-kit","typescript","validation"],"created_at":"2024-07-31T07:01:25.667Z","updated_at":"2025-05-14T19:07:30.487Z","avatar_url":"https://github.com/w3tecch.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","TypeScript Starter/Boilerplate","📦 Legacy \u0026 Inactive Projects"],"sub_categories":["英文资源"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./w3tec-logo.png\" alt=\"w3tec\" width=\"400\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eExpress Typescript Boilerplate\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://david-dm.org/w3tecch/express-typescript-boilerplate\"\u003e\n    \u003cimg src=\"https://david-dm.org/w3tecch/express-typescript-boilerplate/status.svg?style=flat\" alt=\"dependency\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/w3tecch/express-typescript-boilerplate\"\u003e\n    \u003cimg src=\"https://travis-ci.org/w3tecch/express-typescript-boilerplate.svg?branch=master\" alt=\"travis\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://ci.appveyor.com/project/dweber019/express-typescript-boilerplate/branch/master\"\u003e\n    \u003cimg src=\"https://ci.appveyor.com/api/projects/status/f8e7jdm8v58hcwpq/branch/master?svg=true\u0026passingText=Windows%20passing\u0026pendingText=Windows%20pending\u0026failingText=Windows%20failing\" alt=\"appveyor\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://stackshare.io/hirsch88/express-typescript-boilerplate\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/tech-stack-0690fa.svg?style=flat\" alt=\"StackShare\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eA delightful way to building a Node.js RESTful API Services with beautiful code written in TypeScript.\u003c/b\u003e\u003c/br\u003e\n  \u003cspan\u003eInspired by the awesome framework \u003ca href=\"https://laravel.com/\"\u003elaravel\u003c/a\u003e in PHP and of the repositories from \u003ca href=\"https://github.com/pleerock\"\u003epleerock\u003c/a\u003e\u003c/span\u003e\u003c/br\u003e\n  \u003csub\u003eMade with ❤️ by \u003ca href=\"https://github.com/w3tecch\"\u003ew3tech\u003c/a\u003e, \u003ca href=\"https://twitter.com/GeryHirschfeld1\"\u003eGery Hirschfeld\u003c/a\u003e and \u003ca href=\"https://github.com/w3tecch/express-typescript-boilerplate/graphs/contributors\"\u003econtributors\u003c/a\u003e\u003c/sub\u003e\n\u003c/p\u003e\n\n\u003cbr /\u003e\n\n![divider](./w3tec-divider.png)\n\n## ❯ Why\n\nOur main goal with this project is a feature complete server application.\nWe like you to be focused on your business and not spending hours in project configuration.\n\nTry it!! We are happy to hear your feedback or any kind of new features.\n\n### Features\n\n- **Beautiful Code** thanks to the awesome annotations of the libraries from [pleerock](https://github.com/pleerock).\n- **Easy API Testing** with included e2e testing.\n- **Dependency Injection** done with the nice framework from [TypeDI](https://github.com/pleerock/typedi).\n- **Simplified Database Query** with the ORM [TypeORM](https://github.com/typeorm/typeorm).\n- **Clear Structure** with different layers such as controllers, services, repositories, models, middlewares...\n- **Easy Exception Handling** thanks to [routing-controllers](https://github.com/pleerock/routing-controllers).\n- **Smart Validation** thanks to [class-validator](https://github.com/pleerock/class-validator) with some nice annotations.\n- **Custom Validators** to validate your request even better and stricter. [custom-validation-classes](https://github.com/pleerock/class-validator#custom-validation-classes).\n- **API Documentation** thanks to [swagger](http://swagger.io/) and [routing-controllers-openapi](https://github.com/epiphone/routing-controllers-openapi).\n- **API Monitoring** thanks to [express-status-monitor](https://github.com/RafalWilinski/express-status-monitor).\n- **Integrated Testing Tool** thanks to [Jest](https://facebook.github.io/jest).\n- **E2E API Testing** thanks to [supertest](https://github.com/visionmedia/supertest).\n- **Basic Security Features** thanks to [Helmet](https://helmetjs.github.io/).\n- **Easy event dispatching** thanks to [event-dispatch](https://github.com/pleerock/event-dispatch).\n- **Fast Database Building** with simple migration from [TypeORM](https://github.com/typeorm/typeorm).\n- **Easy Data Seeding** with our own factories.\n- **GraphQL** provides as a awesome query language for our api [GraphQL](http://graphql.org/).\n- **TypeGraphQL** thanks to [TypeGraphQL](https://19majkel94.github.io/type-graphql/) we have a some cool decorators to simplify the usage of GraphQL.\n- **DataLoaders** helps with performance thanks to caching and batching [DataLoaders](https://github.com/facebook/dataloader).\n\n![divider](./w3tec-divider.png)\n\n## ❯ Table of Contents\n\n- [Getting Started](#-getting-started)\n- [Scripts and Tasks](#-scripts-and-tasks)\n- [Debugger in VSCode](#-debugger-in-vscode)\n- [API Routes](#-api-routes)\n- [Project Structure](#-project-structure)\n- [Logging](#-logging)\n- [Event Dispatching](#-event-dispatching)\n- [Seeding](#-seeding)\n- [GraphQL](#-graph-q-l)\n- [Docker](#-docker)\n- [Further Documentations](#-further-documentations)\n- [Related Projects](#-related-projects)\n- [License](#-license)\n\n![divider](./w3tec-divider.png)\n\n## ❯ Getting Started\n\n### Step 1: Set up the Development Environment\n\nYou need to set up your development environment before you can do anything.\n\nInstall [Node.js and NPM](https://nodejs.org/en/download/)\n\n- on OSX use [homebrew](http://brew.sh) `brew install node`\n- on Windows use [chocolatey](https://chocolatey.org/) `choco install nodejs`\n\nInstall yarn globally\n\n```bash\nyarn global add yarn\n```\n\nInstall a MySQL database.\n\n\u003e If you work with a mac, we recommend to use homebrew for the installation.\n\n### Step 2: Create new Project\n\nFork or download this project. Configure your package.json for your new project.\n\nThen copy the `.env.example` file and rename it to `.env`. In this file you have to add your database connection information.\n\nCreate a new database with the name you have in your `.env`-file.\n\nThen setup your application environment.\n\n```bash\nyarn run setup\n```\n\n\u003e This installs all dependencies with yarn. After that it migrates the database and seeds some test data into it. So after that your development environment is ready to use.\n\n### Step 3: Serve your App\n\nGo to the project dir and start your app with this yarn script.\n\n```bash\nyarn start serve\n```\n\n\u003e This starts a local server using `nodemon`, which will watch for any file changes and will restart the server according to these changes.\n\u003e The server address will be displayed to you as `http://0.0.0.0:3000`.\n\n![divider](./w3tec-divider.png)\n\n## ❯ Scripts and Tasks\n\nAll script are defined in the `package-scripts.js` file, but the most important ones are listed here.\n\n### Install\n\n- Install all dependencies with `yarn install`\n\n### Linting\n\n- Run code quality analysis using `yarn start lint`. This runs tslint.\n- There is also a vscode task for this called `lint`.\n\n### Tests\n\n- Run the unit tests using `yarn start test` (There is also a vscode task for this called `test`).\n- Run the integration tests using `yarn start test.integration`.\n- Run the e2e tests using `yarn start test.e2e`.\n\n### Running in dev mode\n\n- Run `yarn start serve` to start nodemon with ts-node, to serve the app.\n- The server address will be displayed to you as `http://0.0.0.0:3000`\n\n### Building the project and run it\n\n- Run `yarn start build` to generated all JavaScript files from the TypeScript sources (There is also a vscode task for this called `build`).\n- To start the builded app located in `dist` use `yarn start`.\n\n### Database Migration\n\n- Run `typeorm migration:create -n \u003cmigration-file-name\u003e` to create a new migration file.\n- Try `typeorm -h` to see more useful cli commands like generating migration out of your models.\n- To migrate your database run `yarn start db.migrate`.\n- To revert your latest migration run `yarn start db.revert`.\n- Drops the complete database schema `yarn start db.drop`.\n\n### Database Seeding\n\n- Run `yarn start db.seed` to seed your seeds into the database.\n\n![divider](./w3tec-divider.png)\n\n## ❯ Debugger in VSCode\n\nTo debug your code run `yarn start build` or hit \u003ckbd\u003ecmd\u003c/kbd\u003e + \u003ckbd\u003eb\u003c/kbd\u003e to build your app.\nThen, just set a breakpoint and hit \u003ckbd\u003eF5\u003c/kbd\u003e in your Visual Studio Code.\n\n![divider](./w3tec-divider.png)\n\n## ❯ API Routes\n\nThe route prefix is `/api` by default, but you can change this in the .env file.\nThe swagger and the monitor route can be altered in the `.env` file.\n\n| Route          | Description |\n| -------------- | ----------- |\n| **/api**       | Shows us the name, description and the version of the package.json |\n| **/graphql**   | Route to the graphql editor or your query/mutations requests |\n| **/swagger**   | This is the Swagger UI with our API documentation |\n| **/monitor**   | Shows a small monitor page for the server |\n| **/api/users** | Example entity endpoint |\n| **/api/pets**  | Example entity endpoint |\n\n![divider](./w3tec-divider.png)\n\n## ❯ Project Structure\n\n| Name                              | Description |\n| --------------------------------- | ----------- |\n| **.vscode/**                      | VSCode tasks, launch configuration and some other settings |\n| **dist/**                         | Compiled source files will be placed here |\n| **src/**                          | Source files |\n| **src/api/controllers/**          | REST API Controllers |\n| **src/api/controllers/requests**  | Request classes with validation rules if the body is not equal with a model |\n| **src/api/controllers/responses** | Response classes or interfaces to type json response bodies  |\n| **src/api/errors/**               | Custom HttpErrors like 404 NotFound |\n| **src/api/interceptors/**         | Interceptors are used to change or replace the data returned to the client. |\n| **src/api/middlewares/**          | Express Middlewares like helmet security features |\n| **src/api/models/**               | TypeORM Models |\n| **src/api/repositories/**         | Repository / DB layer |\n| **src/api/services/**             | Service layer |\n| **src/api/subscribers/**          | Event subscribers |\n| **src/api/validators/**           | Custom validators, which can be used in the request classes |\n| **src/api/resolvers/**            | GraphQL resolvers (query, mutation \u0026 field-resolver) |\n| **src/api/types/**                | GraphQL types ,input-types and scalar types |\n| **src/api/** schema.gql           | Generated GraphQL schema |\n| **src/auth/**                     | Authentication checkers and services |\n| **src/core/**                     | The core features like logger and env variables |\n| **src/database/factories**        | Factory the generate fake entities |\n| **src/database/migrations**       | Database migration scripts |\n| **src/database/seeds**            | Seeds to create some data in the database |\n| **src/decorators/**               | Custom decorators like @Logger \u0026 @EventDispatch |\n| **src/loaders/**                  | Loader is a place where you can configure your app |\n| **src/public/**                   | Static assets (fonts, css, js, img). |\n| **src/types/** *.d.ts             | Custom type definitions and files that aren't on DefinitelyTyped |\n| **test**                          | Tests |\n| **test/e2e/** *.test.ts           | End-2-End tests (like e2e) |\n| **test/integration/** *.test.ts   | Integration test with SQLite3 |\n| **test/unit/** *.test.ts          | Unit tests |\n| .env.example                      | Environment configurations |\n| .env.test                         | Test environment configurations |\n| mydb.sql                          | SQLite database for integration tests. Ignored by git and only available after integration tests |\n\n![divider](./w3tec-divider.png)\n\n## ❯ Logging\n\nOur logger is [winston](https://github.com/winstonjs/winston). To log http request we use the express middleware [morgan](https://github.com/expressjs/morgan).\nWe created a simple annotation to inject the logger in your service (see example below).\n\n```typescript\nimport { Logger, LoggerInterface } from '../../decorators/Logger';\n\n@Service()\nexport class UserService {\n\n    constructor(\n        @Logger(__filename) private log: LoggerInterface\n    ) { }\n\n    ...\n```\n\n![divider](./w3tec-divider.png)\n\n## ❯ Event Dispatching\n\nWe use this awesome repository [event-dispatch](https://github.com/pleerock/event-dispatch) for event dispatching.\nWe created a simple annotation to inject the EventDispatcher in your service (see example below). All events are listed in the `events.ts` file.\n\n```typescript\nimport { events } from '../subscribers/events';\nimport { EventDispatcher, EventDispatcherInterface } from '../../decorators/EventDispatcher';\n\n@Service()\nexport class UserService {\n\n    constructor(\n        @EventDispatcher() private eventDispatcher: EventDispatcherInterface\n    ) { }\n\n    public async create(user: User): Promise\u003cUser\u003e {\n        ...\n        this.eventDispatcher.dispatch(events.user.created, newUser);\n        ...\n    }\n```\n\n![divider](./w3tec-divider.png)\n\n## ❯ Seeding\n\nIsn't it exhausting to create some sample data for your database, well this time is over!\n\nHow does it work? Just create a factory for your entities (models) and a seed script.\n\n### 1. Create a factory for your entity\n\nFor all entities we want to seed, we need to define a factory. To do so we give you the awesome [faker](https://github.com/marak/Faker.js/) library as a parameter into your factory. Then create your \"fake\" entity and return it. Those factory files should be in the `src/database/factories` folder and suffixed with `Factory` like `src/database/factories/UserFactory.ts`.\n\nSettings can be used to pass some static value into the factory.\n\n```typescript\ndefine(User, (faker: typeof Faker, settings: { roles: string[] }) =\u003e {\n    const gender = faker.random.number(1);\n    const firstName = faker.name.firstName(gender);\n    const lastName = faker.name.lastName(gender);\n    const email = faker.internet.email(firstName, lastName);\n\n    const user = new User();\n    user.firstName = firstName;\n    user.lastName = lastName;\n    user.email = email;\n    user.roles = settings.roles;\n    return user;\n});\n```\n\nHandle relation in the entity factory like this.\n\n```typescript\ndefine(Pet, (faker: typeof Faker, settings: undefined) =\u003e {\n    const gender = faker.random.number(1);\n    const name = faker.name.firstName(gender);\n\n    const pet = new Pet();\n    pet.name = name;\n    pet.age = faker.random.number();\n    pet.user = factory(User)({ roles: ['admin'] })\n    return pet;\n});\n```\n\n### 2. Create a seed file\n\nThe seeds files define how much and how the data are connected with each other. The files will be executed alphabetically.\nWith the second function, accepting your settings defined in the factories, you are able to create different variations of entities.\n\n```typescript\nexport class CreateUsers implements Seed {\n\n    public async seed(factory: Factory, connection: Connection): Promise\u003cany\u003e {\n        await factory(User)({ roles: [] }).createMany(10);\n    }\n\n}\n```\n\nHere an example with nested factories. You can use the `.map()` function to alter\nthe generated value before they get persisted.\n\n```typescript\n...\nawait factory(User)()\n    .map(async (user: User) =\u003e {\n        const pets: Pet[] = await factory(Pet)().createMany(2);\n        const petIds = pets.map((pet: Pet) =\u003e pet.Id);\n        await user.pets().attach(petIds);\n    })\n    .createMany(5);\n...\n```\n\nTo deal with relations you can use the entity manager like this.\n\n```typescript\nexport class CreatePets implements SeedsInterface {\n\n    public async seed(factory: FactoryInterface, connection: Connection): Promise\u003cany\u003e {\n        const connection = await factory.getConnection();\n        const em = connection.createEntityManager();\n\n        await times(10, async (n) =\u003e {\n            // This creates a pet in the database\n            const pet = await factory(Pet)().create();\n            // This only returns a entity with fake data\n            const user = await factory(User)({ roles: ['admin'] }).make();\n            user.pets = [pet];\n            await em.save(user);\n        });\n    }\n\n}\n```\n\n### 3. Run the seeder\n\nThe last step is the easiest, just hit the following command in your terminal, but be sure you are in the projects root folder.\n\n```bash\nyarn start db.seed\n```\n\n#### CLI Interface\n\n| Command                                              | Description |\n| ---------------------------------------------------- | ----------- |\n| `yarn start \"db.seed\"`                               | Run all seeds |\n| `yarn start \"db.seed --run CreateBruce,CreatePets\"`  | Run specific seeds (file names without extension) |\n| `yarn start \"db.seed -L\"`                            | Log database queries to the terminal |\n| `yarn start \"db.seed --factories \u003cpath\u003e\"`            | Add a different path to your factories (Default: `src/database/`) |\n| `yarn start \"db.seed --seeds \u003cpath\u003e\"`                | Add a different path to your seeds (Default: `src/database/seeds/`) |\n\n![divider](./w3tec-divider.png)\n\n## ❯ GraphQL\n\nFor the GraphQL part we used the library [TypeGraphQL](https://19majkel94.github.io/type-graphql/) to build awesome GraphQL API's.\n\nThe context(shown below) of the GraphQL is builded in the **graphqlLoader.ts** file. Inside of this loader we create a scoped container for each incoming request.\n\n```typescript\nexport interface Context {\n  requestId: number;\n  request: express.Request;\n  response: express.Response;\n  container: ContainerInstance;\n}\n```\n\n### DataLoader\n\nFor the usage of the DataLoaders we created a annotation, which automatically creates and registers a new DataLoader to the scoped container.\n\nHere is an example of the **PetResolver**.\n\n```typescript\nimport DataLoader from 'dataloader';\nimport { DLoader } from '../../decorators/DLoader';\n    ...\n    constructor(\n        private petService: PetService,\n        @Logger(__filename) private log: LoggerInterface,\n        @DLoader(UserModel) private userLoader: DataLoader\u003cstring, UserModel\u003e\n    ) { }\n    ...\n```\n\nOr you could use the repository too.\n\n```typescript\n@DLoader(UserRepository) private userLoader: DataLoader\u003cstring, UserModel\u003e\n```\n\nOr even use a custom method of your given repository.\n\n```typescript\n@DLoader(PetRepository, {\n    method: 'findByUserIds',\n    key: 'userId',\n    multiple: true,\n}) private petLoader: DataLoader\u003cstring, PetModel\u003e\n```\n\n## ❯ Docker\n\n### Install Docker\n\nBefore you start, make sure you have a recent version of [Docker](https://docs.docker.com/engine/installation/) installed\n\n### Build Docker image\n\n```shell\ndocker build -t \u003cyour-image-name\u003e .\n```\n\n### Run Docker image in container and map port\n\nThe port which runs your application inside Docker container is either configured as `PORT` property in your `.env` configuration file or passed to Docker container via environment variable `PORT`. Default port is `3000`.\n\n#### Run image in detached mode\n\n```shell\ndocker run -d -p \u003cport-on-host\u003e:\u003cport-inside-docker-container\u003e \u003cyour-image-name\u003e\n```\n\n#### Run image in foreground mode\n\n```shell\ndocker run -i -t -p \u003cport-on-host\u003e:\u003cport-inside-docker-container\u003e \u003cyour-image-name\u003e\n```\n\n### Stop Docker container\n\n#### Detached mode\n\n```shell\ndocker stop \u003ccontainer-id\u003e\n```\n\nYou can get a list of all running Docker container and its ids by following command\n\n```shell\ndocker images\n```\n\n#### Foreground mode\n\nGo to console and press \u003cCTRL\u003e + C at any time.\n\n### Docker environment variables\n\nThere are several options to configure your app inside a Docker container\n\n#### project .env file\n\nYou can use `.env` file in project root folder which will be copied inside Docker image. If you want to change a property inside `.env` you have to rebuild your Docker image.\n\n#### run options\n\nYou can also change app configuration by passing environment variables via `docker run` option `-e` or `--env`.\n\n```shell\ndocker run --env DB_HOST=localhost -e DB_PORT=3306\n```\n\n#### environment file\n\nLast but not least you can pass a config file to `docker run`.\n\n```shell\ndocker run --env-file ./env.list\n```\n\n`env.list` example:\n\n```\n# this is a comment\nDB_TYPE=mysql\nDB_HOST=localhost\nDB_PORT=3306\n```\n\n![divider](./w3tec-divider.png)\n\n## ❯ Further Documentations\n\n| Name \u0026 Link                       | Description                       |\n| --------------------------------- | --------------------------------- |\n| [Express](https://expressjs.com/) | Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications. |\n| [Microframework](https://github.com/pleerock/microframework) | Microframework is a simple tool that allows you to execute your modules in a proper order, helping you to organize bootstrap code in your application. |\n| [TypeDI](https://github.com/pleerock/typedi) | Dependency Injection for TypeScript. |\n| [routing-controllers](https://github.com/pleerock/routing-controllers) | Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage in Express / Koa using TypeScript and Routing Controllers Framework. |\n| [TypeORM](http://typeorm.io/#/) | TypeORM is highly influenced by other ORMs, such as Hibernate, Doctrine and Entity Framework. |\n| [class-validator](https://github.com/pleerock/class-validator) | Validation made easy using TypeScript decorators. |\n| [class-transformer](https://github.com/pleerock/class-transformer) | Proper decorator-based transformation / serialization / deserialization of plain javascript objects to class constructors |\n| [event-dispatcher](https://github.com/pleerock/event-dispatch) | Dispatching and listening for application events in Typescript |\n| [Helmet](https://helmetjs.github.io/) | Helmet helps you secure your Express apps by setting various HTTP headers. It’s not a silver bullet, but it can help! |\n| [Auth0 API Documentation](https://auth0.com/docs/api/management/v2) | Authentification service |\n| [Jest](http://facebook.github.io/jest/) | Delightful JavaScript Testing Library for unit and e2e tests |\n| [supertest](https://github.com/visionmedia/supertest) | Super-agent driven library for testing node.js HTTP servers using a fluent API |\n| [nock](https://github.com/node-nock/nock) | HTTP mocking and expectations library |\n| [swagger Documentation](http://swagger.io/) | API Tool to describe and document your api. |\n| [SQLite Documentation](https://www.sitepoint.com/getting-started-sqlite3-basic-commands/) | Getting Started with SQLite3 – Basic Commands. |\n| [GraphQL Documentation](http://graphql.org/graphql-js/) | A query language for your API. |\n| [DataLoader Documentation](https://github.com/facebook/dataloader) | DataLoader is a generic utility to be used as part of your application's data fetching layer to provide a consistent API over various backends and reduce requests to those backends via batching and caching. |\n\n![divider](./w3tec-divider.png)\n\n## ❯ Related Projects\n\n- [Microsoft/TypeScript-Node-Starter](https://github.com/Microsoft/TypeScript-Node-Starter) - A starter template for TypeScript and Node with a detailed README describing how to use the two together.\n- [express-graphql-typescript-boilerplate](https://github.com/w3tecch/express-graphql-typescript-boilerplate) - A starter kit for building amazing GraphQL API's with TypeScript and express by @w3tecch\n- [aurelia-typescript-boilerplate](https://github.com/w3tecch/aurelia-typescript-boilerplate) - An Aurelia starter kit with TypeScript\n- [Auth0 Mock Server](https://github.com/hirsch88/auth0-mock-server) - Useful for e2e testing or faking an oAuth server\n\n![divider](./w3tec-divider.png)\n\n## ❯ License\n\n[MIT](/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fw3tecch%2Fexpress-typescript-boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fw3tecch%2Fexpress-typescript-boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fw3tecch%2Fexpress-typescript-boilerplate/lists"}