# @cedjj/magnus-back

> Microservice framework

Latest version **1.2.17** (published 2019-05-12) · ISC license · 0 weekly downloads

## Install

```sh
npm install @cedjj/magnus-back
pnpm add @cedjj/magnus-back
yarn add @cedjj/magnus-back
bun add @cedjj/magnus-back
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.17 |
| Published | 2019-05-12 |
| First published | 2019-03-06 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 47 |
| Unpacked size | 674.8 KB |
| Known vulnerabilities | 0 (+32 in 10 direct dependencies) |
| Install scripts | no |
| Author | Benabbou Salim |
| Maintainers | magnus-cloud, mbrmj |

## Links

- npm: https://www.npmjs.com/package/@cedjj/magnus-back
- Repository: https://gitlab.com/magnus-tooling/magnus-back
- Homepage: https://gitlab.com/magnus-tooling/magnus-back#README
- Issues: https://gitlab.com/magnus-tooling/magnus-back/issues
- npm.io page: https://npm.io/package/@cedjj/magnus-back

## Dependencies (47)

- [cors](https://npm.io/package/cors.md) ^2.8.1
- [rxjs](https://npm.io/package/rxjs.md) 5.4.2
- [redis](https://npm.io/package/redis.md) ^2.6.3
- [dotenv](https://npm.io/package/dotenv.md) ^2.0.0
- [helmet](https://npm.io/package/helmet.md) ^3.2.0
- [lodash](https://npm.io/package/lodash.md) ^4.17.3
- [morgan](https://npm.io/package/morgan.md) ^1.7.0
- [multer](https://npm.io/package/multer.md) ^1.2.1
- [env-var](https://npm.io/package/env-var.md) ^2.4.2
- [express](https://npm.io/package/express.md) ~4.14.0
- [request](https://npm.io/package/request.md) 2.83.0
- [winston](https://npm.io/package/winston.md) ^2.3.0
- [apicache](https://npm.io/package/apicache.md) ^0.7.3
- [es6-shim](https://npm.io/package/es6-shim.md) ^0.35.2
- [mongoose](https://npm.io/package/mongoose.md) 4.7.6
- [optimist](https://npm.io/package/optimist.md) ^0.6.1
- [find-root](https://npm.io/package/find-root.md) ^1.0.0
- [immutable](https://npm.io/package/immutable.md) ^3.8.1
- [socket.io](https://npm.io/package/socket.io.md) ^1.7.2
- [@types/node](https://npm.io/package/@types/node.md) ^8.0.31
- [body-parser](https://npm.io/package/body-parser.md) ^1.15.2
- [es6-promise](https://npm.io/package/es6-promise.md) ^4.0.5
- [express-jwt](https://npm.io/package/express-jwt.md) ^5.1.0
- [require-all](https://npm.io/package/require-all.md) ^2.1.0
- [@types/redis](https://npm.io/package/@types/redis.md) ^0.12.34
- [jsonwebtoken](https://npm.io/package/jsonwebtoken.md) ^7.2.1
- [@types/dotenv](https://npm.io/package/@types/dotenv.md) ^2.0.19
- [@types/lodash](https://npm.io/package/@types/lodash.md) ^4.14.44
- [@types/morgan](https://npm.io/package/@types/morgan.md) ^1.7.32
- [elasticsearch](https://npm.io/package/elasticsearch.md) ^12.1.3
- [jsondiffpatch](https://npm.io/package/jsondiffpatch.md) ^0.2.4
- [@types/jasmine](https://npm.io/package/@types/jasmine.md) ^2.5.38
- [@types/winston](https://npm.io/package/@types/winston.md) 0.0.32
- [express-unless](https://npm.io/package/express-unless.md) ^0.3.0
- [@types/mongoose](https://npm.io/package/@types/mongoose.md) 4.7.23
- [configurator.ts](https://npm.io/package/configurator.ts.md) ^0.2.0
- [express-winston](https://npm.io/package/express-winston.md) ^2.1.2
- [network-address](https://npm.io/package/network-address.md) ^1.1.0
- [@types/socket.io](https://npm.io/package/@types/socket.io.md) ^1.4.27
- [class-transformer](https://npm.io/package/class-transformer.md) 0.1.3
- [@types/body-parser](https://npm.io/package/@types/body-parser.md) 0.0.33
- [socket-controllers](https://npm.io/package/socket-controllers.md) 0.0.2
- [@types/jsonwebtoken](https://npm.io/package/@types/jsonwebtoken.md) ^7.1.33
- [routing-controllers](https://npm.io/package/routing-controllers.md) 0.7.2
- [@types/elasticsearch](https://npm.io/package/@types/elasticsearch.md) ^5.0.9
- [@cedjj/magnus-metadata](https://npm.io/package/@cedjj/magnus-metadata.md) 0.0.9-dev
- [express-content-length-validator](https://npm.io/package/express-content-length-validator.md) 1.0.0

## Recent versions

- 1.2.17 (latest) — 2019-05-12
- 1.2.22 — 2019-03-06

## README

# Type Controllers

Allows to create controllers classes that handle requests.
Simple wrapper over express.js routing.

## Usage

Simply create a class and put annotations on its methods:

```typescript
import {Request, Response} from "express";
import {Controller, Get, Post, Put, Patch, Delete} from "t-controllers/Annotations";

@Controller()
export class BlogController {

    @Get('/blogs')
    getAll(request: Request, response: Response) {
        // use request and response like you always do with express.js ...
    }

    @Get('/blogs/:id')
    getOne(request: Request, response: Response) {
    }

    @Post('/blogs')
    post(request: Request, response: Response) {
    }

    @Put('/blogs/:id')
    put(request: Request, response: Response) {
    }

    @Patch('/blogs/:id')
    patch(request: Request, response: Response) {
    }

    @Delete('/blogs/:id')
    remove(request: Request, response: Response) {
    }

}

// and you need to require controllers and register actions in express app:

import {defaultActionRegistry} from "t-controllers/ActionRegistry";

require('./BlogController'); // require your controller
let app = express(); // create express application
app.use(bodyParser.json()); // setup body parser
defaultActionRegistry.registerActions(app); // register actions in the app
app.listen(3000); // run express app
```

If you want to include the directory with controllers do this:

```typescript
import {defaultActionRegistry} from "t-controllers/ActionRegistry";
import {ControllerUtils} from "t-controllers/ControllerUtils";

ControllerUtils.requireAll([__dirname + '/controllers']); // includes all controllers
let app = express(); // create express application
app.use(bodyParser.json()); // setup body parser
defaultActionRegistry.registerActions(app); // register actions in the app
app.listen(3000); // run express app
```

You can also return result right from the controller, and this result will be pushed via response.send()

```typescript

@Get('/blogs')
getAll(request: Request, response: Response) {
    return [
        { id: 1, name: 'first blog' },
        { id: 2, name: 'second blog' }
    ];
}

// its the same as:
// request.send([{ id: 1, name: 'first blog' }, { id: 2, name: 'second blog' }]);

```

You can also return a Promise (object that contains .then method), and its result will be pushed to response.send after
promise is resolved.

```typescript

@Get('/blogs')
getAll(request: Request, response: Response) {
    return SomeService.loadData();
}

// its the same as SomeService.loadData().then(
//     result => request.send(result),
//     error  => { request.status(500); request.send(error) }
// );

```

You can inject some common express params you may need right into the controller action method:

```typescript

@Get('/blogs/:id')
getAll( request: Request,
        response: Response,
        @Body() requestBody: any,
        @Param('id') id: number,
        @QueryParam('name') name: string) {
    // now you can use your parameters
}

// its the same as:
// let requestBody = response.body;
// let id = response.params.id;
// let name = response.query.name;

```

Take a look on samples in `./sample` for more examples of usages.

## Todos

* cover with tests
* integration with other frameworks (other then express.js) can be easily added, so PRs are welcomed

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