Have ideas to improve npm?Join in the discussion! »

    fastify-decorators
    TypeScript icon, indicating that this package has built-in type declarations

    3.9.0 • Public • Published

    Fastify decorators

    npm version Jetbrains plugin version npm License: MIT

    Node.js CI codecov Language grade: JavaScript

    Framework aimed to provide useful TypeScript decorators to implement controllers, services and request handlers, built with Fastify.

    NOTE: fastify-decorators was developed with fastify ^3.0.0 and may not work with other versions.

    Benefits

    • Fastify compatible - Built with Fastify and supports all its features and plugins
      • JSON Schema validation - Build JSON Schemas to validate and speedup your requests and replies
      • High performance - Framework adds as less overhead to Fastify as it can
    • Highly customizable - Create your controllers, services and their methods as you wish
    • 100% TypeScript - Written in TypeScript and comes with all the required typings
    • Built-in DI - Provides simple Dependency Injection interface to bind your entries

    Documentation

    IDE Support

    Alternatives

    • NestJS - A progressive Node.js framework for building efficient, reliable and scalable server-side applications.
    • Fastify Resty - Modern and declarative REST API framework for superfast and oversimplification backend development, build on top of Fastify and TypeScript.

    Getting started

    Hello! Thank you for checking out fastify-decorators!

    This documents aims to be gentle introduction to the fastify-decorators and its usages.

    Prerequisites

    • Typescript
    • Fastify
    • typings for NodeJS (@types/node package installed)

    Install

    Install with npm

    npm i fastify-decorators --save
    

    Install with yarn

    yarn add fastify-decorators
    

    Additional TypeScript configuration

    Fastify-decorators requires experimentalDecorators feature to be enabled. For this you need to update your TypeScript config:

    tsconfig.json:

    {
      "compilerOptions": {
        "experimentalDecorators": true
      }
    }

    Note: if you struggle which target please refer to table below:

    Node version target
    10.x es2018
    12.x es2019
    14.x es2020

    fastify-decorators itself use "target": "es2018" to support NodeJS 10+ (see Node.js ES2018 Support).

    Your first server

    Request handler way

    Let's write your first server with request handler:

    Project structure:

     ├── index.ts
     ├── handlers
     │    └── first.handler.ts
     └── tsconfig.json
    

    index.ts:

    import { bootstrap } from 'fastify-decorators';
    import { resolve } from 'path';
    
    // Require the framework and instantiate it
    const instance = require('fastify')();
    
    // Register handlers auto-bootstrap
    instance.register(bootstrap, {
      // Specify directory with our handler
      directory: resolve(__dirname, `handlers`),
    
      // Specify mask to match only our handler
      mask: /\.handler\./,
    });
    
    // Run the server!
    instance.listen(3000);

    handlers/first.handler.ts:

    import { GET, RequestHandler } from 'fastify-decorators';
    
    @GET({
      url: '/hello',
    })
    export default class FirstHandler extends RequestHandler {
      async handle() {
        return 'Hello world!';
      }
    }

    Controllers way

    fastify-decorators also provides way to build controllers with multiple handlers:

    Project structure:

     ├── index.ts
     ├── controllers
     │    └── first.controller.ts
     └── tsconfig.json
    

    index.ts:

    import { bootstrap } from 'fastify-decorators';
    import { resolve } from 'path';
    
    // Require the framework and instantiate it
    const instance = require('fastify')();
    
    // Register handlers auto-bootstrap
    instance.register(bootstrap, {
      // Specify directory with our controllers
      directory: resolve(__dirname, `controllers`),
    
      // Specify mask to match only our controllers
      mask: /\.controller\./,
    });
    
    // Run the server!
    instance.listen(3000);

    controllers/first.controller.ts:

    import { Controller, GET } from 'fastify-decorators';
    
    @Controller({ route: '/' })
    export default class FirstController {
      @GET({ url: '/hello' })
      async helloHandler() {
        return 'Hello world!';
      }
    
      @GET({ url: '/goodbye' })
      async goodbyeHandler() {
        return 'Bye-bye!';
      }
    }

    Also, we need to enable experimentalDecorators feature in our TypeScript config

    tsconfig.json:

    {
      "compilerOptions": {
        "experimentalDecorators": true
      }
    }

    Build and run server

    After all our files done we have to build server before we can run it:

    1. Add to our package.json script to build server:

      "scripts": {
        "build": "tsc"
      }
      
    2. Run build script With npm:

      npm run build
      

      with yarn:

      yarn build
      
    3. Start server

      node index.ts
      

    Awesome, that was easy.

    License

    This project licensed under MIT License

    Install

    npm i fastify-decorators

    DownloadsWeekly Downloads

    342

    Version

    3.9.0

    License

    MIT

    Unpacked Size

    393 kB

    Total Files

    132

    Last publish

    Collaborators

    • avatar