shelf_serve 0.2.5 copy "shelf_serve: ^0.2.5" to clipboard
shelf_serve: ^0.2.5 copied to clipboard

outdatedDart 1 only

This package makes it easy to configure and serve a website and backend with Shelf.

shelf_serve #

Configure and run a http server.

Defining a http server #

You define a http server by creating a shelf_serve.yaml file. This file lists the middleware and handlers that should be used to handle requests. For example:


handlers:
  /html:
    type: compound
    handlers:
      /web:
        type: pub
        package:
          path: test_web
      /static:
        type: static
        path: test_static
  /source:
    type: proxy
    url: https://github.com/appsup-dart/shelf_serve
  /api:
    type: rpc
  /echo:
    type: echo

middlewares:
  log_requests:

dependencies:
  test_api:
    path: test_api
  test_echo:
    path: test_echo
    

Adding middleware #

In the middlewares section of the shelf_serve.yaml file, you can list the middlewares to be used and define optional configuration parameters.

There are two build in middlewares:

  • log_requests logs requests to stdout.
  • cors adds cors headers to the response.

Example:


middlewares:
  cors:
    allow: 
      headers: "rpc-auth, content-type"
      methods: "POST, GET, PUT, OPTIONS, DELETE"
      origin: "*"

Adding handlers #

In the handlers section of the shelf_serve.yaml file, you can list different handlers to be used for different routes.

There are five build in handlers:

  • static serves the static files in the directory defined by the path parameter.
  • pub runs pub serve on a dart package and forwards requests to it.
  • proxy proxies requests to the server defined in the url parameter.
  • rpc serves a rest api defined by the rpc package.
  • compound a compound handler that can contain other handlers and middlewares.

Note: when using the rpc handler, you should add the package that defines the api classes in the dependencies section.

Defining custom handlers and middleware #

You can define custom handlers and middleware by annotating a factory function that creates the handler or middleware based on some configuration parameters.

For example

import 'package:shelf_serve/shelf_serve.dart';
import 'package:shelf/shelf.dart';

@ShelfHandler("echo")
createEchoHandler(String type, String route,
                      Map<String,dynamic> config) {
  return (Request r) async => new Response.ok(await r.readAsString());
}

You should add the package that defines those custom handlers and middlewares to the dependencies section.

Running the server from command line #

First install the shelf_serve executable:

pub global activate shelf_serve

Then goto the directory where the shelf_serve.yaml file is located and run:

shelf_serve serve

By default the server will listen to port 8080. You can define another port by:

shelf_serve serve --port 5000

Running the server from code #

Create a dart file and import all the necessary dependencies.

Run the method serve:

serve('path/to/shelf_serve.yaml', port: 5000);

Alternatively, you can run the method serveInIsolate, which will automatically do all the necessary imports based on the dependencies section in the shelf_serve.yaml file.

Creating a docker file #

First install the shelf_serve executable:

pub global activate shelf_serve

Then goto the directory where the shelf_serve.yaml file is located and run:

shelf_serve create-docker-project

By default the project will be created in build/project. To select another output directory run:

shelf_serve create-docker-project --output-directory some/other/path

Next, go to the built project directory. There will be a Dockerfile there. You can create a container image by running:

docker build -t my/app .

And to run this image:

docker run -d -p 8080:8080 my/app
0
likes
0
pub points
0%
popularity

Publisher

unverified uploader

This package makes it easy to configure and serve a website and backend with Shelf.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

initialize, pubspec, rpc, shelf, shelf_cors, shelf_proxy, shelf_route, shelf_rpc, shelf_static, unscripted, yaml, yamlicious

More

Packages that depend on shelf_serve