0.18.1 • Published 5 years ago

@tokilabs/tractor v0.18.1

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

Tractor

A Hapi server with superpowers

Why?

When building apps using microservices it's important that they have the same structure and their setup is as close as possible to each other. Tractor packs the tools that are used in all of our microservices and comes with sensible defaults for both development and production environments. It's configuration is accessible from outside so you can tailor it to your specific needs.

By the way, don't worry. Every feature is optional.

What's on the package

  • Dependency injection using an Inversify Container from Plow
  • A catch-all controller for 404 responses and logging
  • A meta controller that lists your API routes
  • Exception classes for normalizing error responses
  • Response classes for common scenarios: AckResponse, CreatedResponse and NotFound
  • @Controller and @Endpoint decorators for Hapi routing
  • Request class you can extend to automatically deserialize the request

Versions

Tractor's minor version now matches the hapi major version, beginning with Hapi 18. Anything lower than that is for Hapi 16.x.

We do not support Hapi 17 (simply because we never used it, feel free to submit a PR)

Simple Usage

import { createServer } from '@cashfarm/tractor';

export const ServiceName = 'TodoService';

export const server = createServer(
  // Service name
  ServiceName,
  // Options
  {
    apiPrefix: '/todos/v1',
    port: 8000
  }
)
.then(srv => {
  // If your are using @Controller decorator, just require your controllers
  require('./todoCtrl');

  // if running directly, start the server
  if (!module.parent) {
    srv.start(() => {
      console.log(`✅ Started ${ServiceName} microservice on ${srv.info.uri}`);
    });
  }

  // if importing, return the server (used for testing)
  return srv;
});

Configuration Options

debug

@type boolean default: true in development, false in production

Defines where logs and errors should contain debug information or not

enableCors

@type boolean default: true

Whether to enable CORS or not

port

@type boolean default: 3000

The port to listen to

apiPrefix

@type number default: ''

An optional prefix to all endpoints