Skip to content

Latest commit

 

History

History
128 lines (94 loc) · 3.33 KB

README.md

File metadata and controls

128 lines (94 loc) · 3.33 KB

npm version Master Workflow Coverage Status Known Vulnerabilities BCH compliance

REST Services for Typescript

This is a lightweight annotation-based expressjs extension for typescript.

It can be used to define your APIs using decorators.

Table of Contents

Installation

This library only works with typescript. Ensure it is installed:

npm install typescript -g

To install typescript-rest:

npm install typescript-rest --save

Configuration

Typescript-rest requires the following TypeScript compilation options in your tsconfig.json file:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "target": "es6" // or anything newer like esnext
  }
}

Basic Usage

import * as express from 'express';
import { Server, Path, GET, PathParam } from 'typescript-rest';

@Path('/hello')
class HelloService {
    @Path(':name')
    @GET
    sayHello(@PathParam('name') name: string): string {
        return 'Hello ' + name;
    }
}

let app: express.Application = express();
Server.buildServices(app);

app.listen(3000, function () {
    console.log('Rest Server listening on port 3000!');
});

That's it. You can just call now:

GET http://localhost:3000/hello/joe

Using with an IoC Container

Install the IoC container and the serviceFactory for the IoC Container

npm install @nmshd/typescript-rest --save
npm install @nmshd/typescript-ioc --save
npm install @nmshd/typescript-rest-ioc --save

Then add a rest.config file in the root of your project:

{
    "serviceFactory": "@nmshd/typescript-rest-ioc"
}

And you can use Injections, Request scopes and all the features of the IoC Container. It is possible to use it with any other IoC Container, like Inversify.

Example:

class HelloService {
    sayHello(name: string) {
        return 'Hello ' + name;
    }
}

@Path('/hello')
class HelloRestService {
    @Inject
    private helloService: HelloService;

    @Path(':name')
    @GET
    sayHello(@PathParam('name') name: string): string {
        return this.sayHello(name);
    }
}

Complete Guide

Check our documentation.

Boilerplate Project

You can check this project to get started.