Page Contents

Overview

The Server interface defines the minimal required functions (start and stop) to implement for a LoopBack application. Servers in LoopBack 4 are used to represent implementations for inbound transports and/or protocols such as REST over http, gRPC over http2, graphQL over https, etc. They typically listen for requests on a specific port, handle them, and return appropriate responses. A single application can have multiple server instances listening on different ports and working with different protocols.

Usage

LoopBack 4 currently offers the @loopback/rest package out of the box which provides an HTTP based server implementation handling requests over REST called RestServer. In order to use it in your application, all you need to do is register the RestComponent to your application class, and it will provide you with an instance of RestServer listening on port 3000. The following shows how to make use of it:

import {Application} from '@loopback/core';
import {RestComponent, RestServer} from '@loopback/rest';

export class HelloWorldApp extends Application {
  constructor() {
    super({
      components: [RestComponent],
    });
  }

  async start() {
    // get a singleton HTTP server instance
    const rest = await this.getServer(RestServer);
    // give our RestServer instance a sequence handler function which
    // returns the Hello World string for all requests
    rest.handler((sequence, request, response) => {
      sequence.send(response, 'Hello World!');
    });
    // call start on application class, which in turn starts all registered
    // servers
    await super.start();
    console.log(`REST server running on port: ${await rest.get('rest.port')}`);
  }
}

Configuration

Add servers to application instance

You can add server instances to your application via the app.server() method individually or as an array using app.servers() method. Using app.server() allows you to uniquely name your binding key for your specific server instance. The following example demonstrates how to use these functions:

import {Application} from '@loopback/core';
import {RestServer} from '@loopback/rest';

export class HelloWorldApp extends Application {
  constructor() {
    super({
      components: [RestComponent],
    });
  }
  // This server instance will be bound under "servers.fooServer".
  this.server(RestServer, 'fooServer');
  // Creates a binding for "servers.MQTTServer" and a binding for
  // "servers.SOAPServer";
  this.servers([MQTTServer, SOAPServer]);
}

You can also add multiple servers in the constructor of your application class as shown here.

Next Steps