static
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 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.
- // 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 fromweb
(in development) orbuild/web
(in production), depending on yourANGEL_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
ortrue
,then the callback's result will be sent to the user, instead of the file contents.