The Protevus Platform: Unified Full-Stack Development
https://protevus.com
example | ||
lib | ||
test | ||
.gitignore | ||
.travis.yml | ||
analysis_options.yaml | ||
CHANGELOG.md | ||
LICENSE | ||
pubspec.yaml | ||
README.md |
static
Static server middleware for Angel.
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_static/angel_static.dart';
import 'package:file/local.dart';
main() async {
var app = new Angel();
var fs = const LocalFileSystem();
// Normal static server
var vDir = new VirtualDirectory(app, fs, source: new Directory('./public'));
// Send Cache-Control, ETag, etc. as well
var vDir = new CachingVirtualDirectory(app, fs, source: new Directory('./public'));
// Mount the VirtualDirectory's request handler
app.use(vDir.handleRequest);
// Start your server!!!
await 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 = new CachingVirtualDirectory(...);
// Mount it
app.use(vDir.handleRequest);
// Fallback to index.html on 404
app.use(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 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
ortrue
, then the callback's result will be sent to the user, instead of the file contents.