2021-05-15 13:28:26 +00:00
|
|
|
# angel3_static
|
|
|
|
[](https://pub.dartlang.org/packages/angel3_static)
|
|
|
|
[](https://dart.dev/null-safety)
|
|
|
|
[](https://gitter.im/angel_dart/discussion)
|
|
|
|
|
|
|
|
[](https://github.com/dukefirehawk/angel/tree/angel3/packages/static/LICENSE)
|
|
|
|
|
2016-11-23 09:37:28 +00:00
|
|
|
|
2018-11-14 05:43:47 +00:00
|
|
|
Static server infrastructure for Angel.
|
|
|
|
|
|
|
|
*Can also handle `Range` requests now, making it suitable for media streaming, ex. music, video, etc.*
|
2016-04-21 21:27:22 +00:00
|
|
|
|
|
|
|
# Installation
|
|
|
|
In `pubspec.yaml`:
|
|
|
|
|
2016-07-01 20:33:42 +00:00
|
|
|
```yaml
|
|
|
|
dependencies:
|
2021-05-15 13:28:26 +00:00
|
|
|
angel3_static: ^4.0.0
|
2016-07-01 20:33:42 +00:00
|
|
|
```
|
2016-04-21 21:27:22 +00:00
|
|
|
|
|
|
|
# Usage
|
2017-09-23 21:57:54 +00:00
|
|
|
To serve files from a directory, you need to create a `VirtualDirectory`.
|
2021-05-15 13:28:26 +00:00
|
|
|
Keep in mind that `angel3_static` uses `package:file` instead of `dart:io`.
|
2016-04-21 21:27:22 +00:00
|
|
|
|
|
|
|
```dart
|
2021-05-15 13:28:26 +00:00
|
|
|
import 'package:angel3_framework/angel3_framework.dart';
|
|
|
|
import 'package:angel3_framework/http.dart';
|
|
|
|
import 'package:angel3_static/angel3_static.dart';
|
2017-09-24 05:02:10 +00:00
|
|
|
import 'package:file/local.dart';
|
2016-04-21 21:27:22 +00:00
|
|
|
|
2021-05-15 13:28:26 +00:00
|
|
|
void main() async {
|
2019-05-02 23:29:09 +00:00
|
|
|
var app = Angel();
|
2017-09-24 05:02:10 +00:00
|
|
|
var fs = const LocalFileSystem();
|
2017-02-27 00:19:34 +00:00
|
|
|
|
|
|
|
// Normal static server
|
2019-05-02 23:29:09 +00:00
|
|
|
var vDir = VirtualDirectory(app, fs, source: Directory('./public'));
|
2017-02-27 00:19:34 +00:00
|
|
|
|
|
|
|
// Send Cache-Control, ETag, etc. as well
|
2019-05-02 23:29:09 +00:00
|
|
|
var vDir = CachingVirtualDirectory(app, fs, source: Directory('./public'));
|
2017-09-23 21:57:54 +00:00
|
|
|
|
|
|
|
// Mount the VirtualDirectory's request handler
|
2018-11-13 21:25:17 +00:00
|
|
|
app.fallback(vDir.handleRequest);
|
2017-02-27 00:19:34 +00:00
|
|
|
|
2017-09-23 21:57:54 +00:00
|
|
|
// Start your server!!!
|
2019-05-02 23:29:09 +00:00
|
|
|
await AngelHttp(app).startServer();
|
2016-04-21 21:27:22 +00:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2017-09-23 21:57:54 +00:00
|
|
|
# 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.
|
|
|
|
|
2017-04-01 01:08:01 +00:00
|
|
|
```dart
|
2017-09-23 21:57:54 +00:00
|
|
|
// Create VirtualDirectory as well
|
2019-05-02 23:29:09 +00:00
|
|
|
var vDir = CachingVirtualDirectory(...);
|
2017-04-01 01:08:01 +00:00
|
|
|
|
2017-09-23 21:57:54 +00:00
|
|
|
// Mount it
|
2018-11-13 21:25:17 +00:00
|
|
|
app.fallback(vDir.handleRequest);
|
2017-09-23 21:57:54 +00:00
|
|
|
|
|
|
|
// Fallback to index.html on 404
|
2018-11-13 21:25:17 +00:00
|
|
|
app.fallback(vDir.pushState('index.html'));
|
2017-04-01 01:08:01 +00:00
|
|
|
```
|
|
|
|
|
2016-05-02 23:11:25 +00:00
|
|
|
# Options
|
2016-11-23 17:22:23 +00:00
|
|
|
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
|
2016-06-24 22:23:32 +00:00
|
|
|
`build/web` (in production), depending on your `ANGEL_ENV`.
|
2016-11-23 17:24:04 +00:00
|
|
|
- **indexFileNames**: A `List<String>` of filenames that should be served as index pages. Default is `['index.html']`.
|
2016-11-23 17:22:23 +00:00
|
|
|
- **publicPath**: To serve index files, you need to specify the virtual path under which
|
2016-05-02 23:11:25 +00:00
|
|
|
angel_static is serving your files. If you are not serving static files at the site root,
|
|
|
|
please include this.
|
2017-01-25 22:40:41 +00:00
|
|
|
- **callback**: Runs before sending a file to a client. Use this to set headers, etc. If it returns anything other than `null` or `true`,
|
2017-09-23 21:57:54 +00:00
|
|
|
then the callback's result will be sent to the user, instead of the file contents.
|