2.1.0 • Published 7 months ago

require-fastifyroutes v2.1.0

Weekly downloads
3
License
MIT
Repository
github
Last release
7 months ago

require-fastifyroutes

CI Coverage Status

A module to help organize and manage Fastify route definitions using ES Modules. This package automatically discovers and loads route files from a directory structure.

Requirements

  • Node.js >= 16.0.0

Installation

npm install require-fastifyroutes --save

Usage

Basic Usage

In your main application file:

import Fastify from 'fastify';
import routeLoader from 'require-fastifyroutes';

const fastify = Fastify({ logger: true });

// Register all routes
const start = async () => {
  try {
    // Load routes from a directory
    const routes = await routeLoader('./routes');
    
    // Register routes with Fastify
    await fastify.register(async (instance) => {
      routes.routes.forEach(route => instance.route(route));
    });
    
    await fastify.listen({ port: 3000 });
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
}

start();

Auto-Loading Routes

You can use the autoLoadModules helper to manually load modules from a directory:

import { dirname } from 'path';
import { fileURLToPath } from 'url';
import { autoLoadModules } from 'require-fastifyroutes';

const __dirname = dirname(fileURLToPath(import.meta.url));

// Auto-load all modules in the current directory
export default await autoLoadModules(__dirname);

Defining Routes

Routes can be defined in several ways:

1. Export a routes array:

export default {
  routes: [
    {
      method: 'GET',
      path: '/route1',
      handler: async (request, reply) => {
        return { hello: 'world' }
      }
    }
  ]
};

2. Export a single route:

export default {
  method: 'GET',
  path: '/route1',
  handler: async (request, reply) => {
    return { hello: 'world' }
  }
};

3. Export an array of routes:

export default [
  {
    method: 'GET',
    path: '/route1',
    handler: async (request, reply) => {
      return { hello: 'world' }
    }
  },
  {
    method: 'POST',
    path: '/route2',
    handler: async (request, reply) => {
      const { body } = request;
      return body;
    }
  }
];

Features

  • ESM Support: Uses native ES Modules
  • Auto-discovery: Automatically finds and loads route files
  • Flexible Route Definitions: Supports multiple ways to define routes
  • Error Handling: Gracefully handles various error cases
  • Type Safety: Uses optional chaining for safer property access
  • Directory Support: Works with both directory paths and import.meta.url

Debug Logging

This module uses the debug module for logging output. To see logging output, set:

DEBUG=require-fastifyroutes*

Error Handling

The module handles various error cases:

  • Non-existent directories
  • Invalid route definitions
  • Syntax errors in route files
  • Circular dependencies
  • Missing file extensions
  • Invalid import URLs

API

Default Export

import routeLoader from 'require-fastifyroutes';
const routes = await routeLoader('./routes');

Named Exports

import { autoLoadModules } from 'require-fastifyroutes';
const modules = await autoLoadModules('./routes');

Release History

  • 2.0.0 Complete rewrite with ESM support and improved error handling
  • 1.0.0 Initial release

License

MIT

0.11.0

7 months ago

2.1.0

7 months ago

0.10.0

2 years ago

0.9.0

5 years ago