This is a lightweight annotation-based expressjs extension for typescript.
It can be used to define your APIs using decorators.
Table of Contents
This repository was forked in August 2022 to address critical security updates since the last official typescript-rest release for those still using the library.
This library only works with typescript. Ensure it is installed:
npm install typescript -g
To install typescript-rest:
npm install typescript-rest --save
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
}
}
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
Install the IoC container and the serviceFactory for the IoC Container
npm install typescript-rest --save
npm install typescript-ioc --save
npm install typescript-rest-ioc --save
Then add a rest.config file in the root of your project:
{
"serviceFactory": "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);
}
}
Check our documentation.
You can check this project to get started.