# route-controllers

> Use opinionated controllers as express routes

Latest version **0.0.10** (published 2019-07-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install route-controllers
pnpm add route-controllers
yarn add route-controllers
bun add route-controllers
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.10 |
| Published | 2019-07-30 |
| First published | 2019-07-24 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 29.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Jay Baker |
| Maintainers | logikaljay |
| Keywords | express, opinionated, controllers, routes |

## Links

- npm: https://www.npmjs.com/package/route-controllers
- npm.io page: https://npm.io/package/route-controllers

## Dependencies (2)

- [bpc](https://npm.io/package/bpc.md) 0.0.1
- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ^0.1.13

## Recent versions

- 0.0.10 (latest) — 2019-07-30
- 0.0.9 — 2019-07-25
- 0.0.8 — 2019-07-25
- 0.0.7 — 2019-07-24
- 0.0.6 — 2019-07-24
- 0.0.5 — 2019-07-24
- 0.0.4 — 2019-07-24
- 0.0.3 — 2019-07-24
- 0.0.2 — 2019-07-24
- 0.0.1 — 2019-07-24

## README

# route-controllers

Use opinionated typescript ES6 classes as express routes.

## How to use

```typescript
import * as express from "express"
import GenerateRouter, { Middleware } from "route-controllers"

class TestController {
  public async GetTest(name: string): Promise<string> {
    return `Hi ${name}`
  }

  @HttpMethod("post")
  public async AnotherTest(name: string): Promis<string> {
    return `Created ${name}`
  }

  public async GetJsonTest(name: string): Promise<object> {
    return {
      "greeting": `Hi ${name}`
    }
  }

  public async GetAdvancedTest(name: string, req: express.Request, res: express.Response): void => {
    res.end(`Hi ${req.query.name}`)
  }

  @Middleware([
    (req, res, next) => {
      console.log("request received")
      next()
    }
  ])
  public async GetMiddlewareTest(name: string): string => {
    return `Hi ${name}`
  }
}

var router = GenerateRouter([TestController])
var app = express()
app.use(router)

app.listen(3000, () => {
  console.log(`express listening on ${3000}`)
})
```

## How do I map http methods?

By default we deduce the http method from the name of your method in the controllers

| method name | http method | route |
| ----------- | ----------- | ----- |
| GetSomething | GET | /GetSomething |
| CreateSomething | POST | /CreateSomething |
| UpdateSomething | PUT | /UpdateSomething |
| DeleteSomething | DELETE | /DeleteSomething |


However you can overwrite our basic method mapper by passing `setHttpMethodNameMapper` a function before you `GenerateRouter`

In the below example we will map all method names starting with `delete` to a delete http method, everything else will be a `get` http method.

```typescript
import GenerateRouter, { setHttpMethodNameMapper } from "route-controllers"

setHttpMethodNameMapper(
  (methodName) => {
    return methodName.toLowerCase().startsWith("delete") ? "delete" : "get"
  }
)

const router = GenerateRouter([MyController])
```

You can also overwrite a method by using the `HttpMethod` decorator:

```typescript
import { HttpMethod } from "route-controllers"

class TestController {
  @HttpMethod("post")
  public async GetTest() => {
    return `This is very misleading for the next developer`
  }
}
```

---
_Source: https://npm.io/package/route-controllers · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
