| 
  
   Size: 2514 
  
  Comment:  
 | 
  
   Size: 2511 
  
  Comment:  
 | 
| Deletions are marked like this. | Additions are marked like this. | 
| Line 8: | Line 8: | 
| ... | 
tsoa
Framework with integrated OpenAPI compiler to build Node.js serve-side applications using typescript.
Example
   1 npm init
   2 npm install ts-node typescript express @types/express tslint cors @types/cors tsoa @types/tsoa swagger-ui-express @types/swagger-ui-express
   3 mkdir -p src/hello
   4 touch src/index.ts
   5 touch src/hello/helloController.ts  
   6 touch src/hello/helloResponse.ts
   7 
   8 mkdir -p build
   9 # create tsconfig
  10 npx tsc --init
  11 touch README.md 
  12 # ts-node src/index.ts
  13 # enable "experimentalDecorators": true,  in tsconfig.json 
  14 # enable "resolveJsonModule": true, in tsconfig.json  
  15 # in script start in package.json put 
  16 #  npx tsoa swagger && npx tsoa spec-and-routes && ts-node src/index.ts
  17 npm start
  18 # http://localhost:3000/
  19 curl -vvv localhost:3000
  20 curl -vvv localhost:3000/hello/world
  21 curl -vvv localhost:3000/swagger/
tsoa.json
src/index.ts
   1 import express from 'express';
   2 import cors from 'cors';
   3 import bodyParser from 'body-parser';
   4 import { RegisterRoutes } from "../build/routes";
   5 import * as swaggerJson from '../build/swagger.json';
   6 import * as swaggerUI from 'swagger-ui-express';
   7 
   8 const port = process.env.PORT || 3000;
   9 const app = express();
  10 app.use(cors());
  11 app.use(bodyParser.json());
  12 app.use(["/openapi", "/docs", "/swagger"], swaggerUI.serve, swaggerUI.setup(swaggerJson));
  13 RegisterRoutes(app);
  14 
  15 app.get('/', (req, res) => {
  16     res.send('Hello');
  17 });
  18 
  19 app.listen(port, () => {
  20     console.log('Listening in port ' + port);
  21 });
src/hello/helloResponse.ts
src/hello/helloController.ts
   1 import {
   2     Controller,
   3     Get,
   4     Path,
   5     Route,
   6 } from "tsoa";
   7 import { HelloResponse } from "./helloResponse";
   8 
   9 @Route("hello")
  10 export class HelloController extends Controller {
  11     @Get("{name}")
  12     public async getHello(
  13         @Path() name: string
  14     ): Promise<HelloResponse> {
  15         return { response: "Hello " + name };
  16     }
  17 }
