# express-lite-router

> ## Installation ```bash npm i express-lite-router ``` ## Usage

Latest version **2.1.5** (published 2022-07-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install express-lite-router
pnpm add express-lite-router
yarn add express-lite-router
bun add express-lite-router
```

## Health

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

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.5 |
| Published | 2022-07-18 |
| First published | 2021-12-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 14.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Vlad Tkachuk |
| Maintainers | w1adok143 |
| Keywords | express, express-router |

## Links

- npm: https://www.npmjs.com/package/express-lite-router
- Repository: https://github.com/w1adok143/express-lite-router
- Homepage: https://github.com/w1adok143/express-lite-router#readme
- npm.io page: https://npm.io/package/express-lite-router

## Alternatives

- [express-promise-router](https://npm.io/package/express-promise-router.md) — 736.1K weekly downloads
- [next-usequerystate](https://npm.io/package/next-usequerystate.md) — 29.8K weekly downloads
- [@bitkyc08/opencodex](https://npm.io/package/@bitkyc08/opencodex.md) — 4.6K weekly downloads
- [lynkr](https://npm.io/package/lynkr.md) — 575 weekly downloads
- [baremetal.js](https://npm.io/package/baremetal.js.md) — 42 weekly downloads

## Recent versions

- 2.1.5 (latest) — 2022-07-18
- 2.1.4 — 2022-07-18
- 2.1.3 — 2022-04-08
- 2.1.2 — 2022-03-16
- 2.1.1 — 2022-03-15
- 2.1.0 — 2022-03-02
- 2.0.0 — 2022-01-15
- 1.0.4 — 2021-12-12
- 1.0.3 — 2021-12-12
- 1.0.2 — 2021-12-09
- 1.0.1 — 2021-12-09
- 1.0.0 — 2021-12-07

## README

# express-lite-router

## Installation
```bash
npm i express-lite-router
```
## Usage

```js
import {Router} from "express-lite-router";
import express, {Application} from "express";
import mariadb from "mariadb";

const router = Router({
    router: express.Router(),
    dir: 'src/backend',
    context: {
        pool: mariadb.createPool({
            host: 'mydb.com',
            user: 'myUser',
            password: 'myPassword',
            connectionLimit: 5
        })
    }
});

router.get('/', 'Home/HomeController@index');

const app: Application = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(router.express());
app.listen(3000, () => console.log('Development server http://localhost:3000 started'));
```

## Creating controller
Your controller must be extended from 'Controller'

```js
import {Controller} from "express-lite-router";
import Model from "@backend/Home/HomeModel";

export default class HomeController extends Controller {
    private model: Model;

    public async init() {
        this.model = await this.$create(Model, 1);
    }

    public async index() {
        try {
            return this.success({rows: await this.model.select()});
        } catch (e) {
            return this.error(e);
        }
    }
}
```
## Creating Model
Your model must be extended from 'Model'

```js
import {Model} from "express-lite-router";
import {Pool} from "mariadb";

export default class HomeModel extends Model {
    private id;

    public constructor(id: number) {
        super();

        this.id = id;
    }

    public async init() {
        console.log("Hello, I'm a webhook");
    }

    public async select() {
        return await this.pool.query(`SELECT ${this.id} as val`);
    }

    private get pool(): Pool {
        return this.$context.pool;
    }
}
```

## Set 'lang' app
```js
// OR http://localhost:3000/api?lang=ua
// OR { lang: 'ua' }

console.log(this.$lang); // 'ua'
```

## Can use 'request'

```js
console.log(this.request); // express Request
```

## Can use 'response'

```js
this.response; // express Response
```

## Can use '$context'

```js
const router = Router({
    context: {
        pool: mariadb.createPool({
            host: 'mydb.com',
            user: 'myUser',
            password: 'myPassword',
            connectionLimit: 5
        })
    }
});

console.log(this.$context); // { pool, request, response }
```

## Can use '$lang'

```js
console.log(this.$lang); // 'en'
```

## Can use '$l(message)'

```js
console.log(this.$l({"en":"Not found", "ua":"Не знайдено"})); // 'Not found'
```

## Can use '$create(Class, ...params)'

```js
this.model = await this.$create(Model, 1);
```

## Can use 'success(data? = {}, status? = 200)'

```js
try {
    return this.success(); // json
} catch (e) {
    
}
```

## Can use 'error(e)'

```js
try {
    
} catch (e) {
    return this.error(e); // json
}

```
## Can use 'ApiError(message, status? = 400, code? = 0)'

```js
try {
    throw new ApiError('Not found', 404);
} catch (e) {
    return this.error(e); // json
}
```

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