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:
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';
6. main() async {
7. var app = Angel();
8. var fs = const LocalFileSystem();
10. // Normal static server
11. var vDir = VirtualDirectory(app, fs, source: Directory('./public'));
13. // Send Cache-Control, ETag, etc. as well
14. var vDir = CachingVirtualDirectory(app, fs, source: Directory('./public'));
16. // Mount the VirtualDirectory's request handler
17. app.fallback(vDir.handleRequest);
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(...);
4. // Mount it
5. app.fallback(vDir.handleRequest);
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
Directorycontaining 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
nullortrue,then the callback's result will be sent to the user, instead of the file contents.

