Norse Polytheistic Mythology
Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

fastify-decorators

3.6.0 • Public • Published

Fastify decorators

npm version npm License: MIT

Node.js CI Build example 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

324

Version

3.6.0

License

MIT

Unpacked Size

247 kB

Total Files

142

Last publish

Collaborators

  • avatar