static

Pubbuild 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:

  1. dependencies:
  2. 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.

  1. import 'package:angel_framework/angel_framework.dart';
  2. import 'package:angel_framework/http.dart';
  3. import 'package:angel_static/angel_static.dart';
  4. import 'package:file/local.dart';
  5.  
  6. main() async {
  7. var app = Angel();
  8. var fs = const LocalFileSystem();
  9.  
  10. // Normal static server
  11. var vDir = VirtualDirectory(app, fs, source: Directory('./public'));
  12.  
  13. // Send Cache-Control, ETag, etc. as well
  14. var vDir = CachingVirtualDirectory(app, fs, source: Directory('./public'));
  15.  
  16. // Mount the VirtualDirectory's request handler
  17. app.fallback(vDir.handleRequest);
  18.  
  19. // Start your server!!!
  20. await AngelHttp(app).startServer();
  21. }

Push State

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

  1. // Create VirtualDirectory as well
  2. var vDir = CachingVirtualDirectory(...);
  3.  
  4. // Mount it
  5. app.fallback(vDir.handleRequest);
  6.  
  7. // Fallback to index.html on 404
  8. 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) orbuild/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 whichangel_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.