The Protevus Platform: Unified Full-Stack Development https://protevus.com
Find a file
Tobe Osakwe 1be896288c
Merge pull request #39 from tvolkert/uint8list
Prepare for upcoming change to File.openRead()
2019-07-08 20:16:57 -04:00
example 2.1.3 2019-05-02 19:29:09 -04:00
lib Prepare for upcoming change to File.openRead() 2019-06-25 13:12:54 -07:00
test 2.1.3 2019-05-02 19:29:09 -04:00
.gitignore Ignore media 2018-11-14 00:53:07 -05:00
.travis.yml Build both dev and stable Dart 2018-07-09 13:38:58 -04:00
analysis_options.yaml 2.1.3 2019-05-02 19:29:09 -04:00
CHANGELOG.md 2.1.3+1 2019-06-06 12:19:09 -04:00
LICENSE Initial commit 2016-04-21 17:29:34 -04:00
pubspec.yaml Prepare for upcoming change to File.openRead() 2019-06-25 13:12:54 -07:00
README.md 2.1.3 2019-05-02 19:29:09 -04:00

static

Pub build status

Static server infrastructure for Angel.

Can also handle Range requests now, making it suitable for media streaming, ex. music, video, etc.

Installation

In pubspec.yaml:

dependencies:
    angel_static: ^2.0.0-alpha

Usage

To serve files from a directory, you need to create a VirtualDirectory. Keep in mind that angel_static uses package:file instead of dart:io.

import 'package:angel_framework/angel_framework.dart';
import 'package:angel_framework/http.dart';
import 'package:angel_static/angel_static.dart';
import 'package:file/local.dart';

main() async {
  var app = Angel();
  var fs = const LocalFileSystem();

  // Normal static server
  var vDir = VirtualDirectory(app, fs, source: Directory('./public'));

  // Send Cache-Control, ETag, etc. as well
  var vDir = CachingVirtualDirectory(app, fs, source: Directory('./public'));

  // Mount the VirtualDirectory's request handler
  app.fallback(vDir.handleRequest);

  // Start your server!!!
  await AngelHttp(app).startServer();
}

Push State

VirtualDirectory also exposes a pushState method that returns a request handler that serves the file at a given path as a fallback, unless the user is requesting that file. This can be very useful for SPA's.

// Create VirtualDirectory as well
var vDir = CachingVirtualDirectory(...);

// Mount it
app.fallback(vDir.handleRequest);

// Fallback to index.html on 404
app.fallback(vDir.pushState('index.html'));

Options

The VirtualDirectory API accepts a few named parameters:

  • source: A Directory containing the files to be served. If left null, then Angel will serve either from web (in development) or build/web (in production), depending on your ANGEL_ENV.
  • indexFileNames: A List<String> of filenames that should be served as index pages. Default is ['index.html'].
  • publicPath: To serve index files, you need to specify the virtual path under which angel_static is serving your files. If you are not serving static files at the site root, please include this.
  • callback: Runs before sending a file to a client. Use this to set headers, etc. If it returns anything other than null or true, then the callback's result will be sent to the user, instead of the file contents.