Skip to content

Commit c45ec02

Browse files
add shelf static server
1 parent c60c75f commit c45ec02

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

bin/server.dart

+34-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,32 @@
11
import 'dart:io';
22
import 'package:shelf/shelf.dart';
33
import 'package:shelf/shelf_io.dart' as io;
4+
import 'package:shelf_static/shelf_static.dart';
45

56
void main() async {
6-
final handler =
7-
const Pipeline().addMiddleware(logRequests()).addHandler(echoRequest);
7+
// Check if index.html exists
8+
String indexFile = 'build/web/index.html';
9+
bool indexFileExists = await File('build/web/index.html').exists();
10+
11+
if (!indexFileExists) {
12+
indexFile = 'README.md';
13+
}
14+
15+
final handler = const Pipeline()
16+
.addMiddleware(logRequests())
17+
.addMiddleware(_corsHeaders) // Add CORS headers middleware
18+
.addHandler(createStaticHandler('build/web', defaultDocument: indexFile));
19+
20+
final handler2 = const Pipeline()
21+
.addMiddleware(logRequests())
22+
.addMiddleware(_corsHeaders) // Add CORS headers middleware
23+
.addHandler(echoRequest);
824

925
final server = await io.serve(handler, InternetAddress.anyIPv4, 4001);
10-
print('Serving at http://${server.address.host}:${server.port}');
26+
final server2 = await io.serve(handler2, InternetAddress.anyIPv4, 4002);
27+
print('Serving static site at http://${server.address.host}:${server.port}');
28+
print(
29+
'Serving handling requests at http://${server2.address.host}:${server2.port}');
1130
}
1231

1332
Response echoRequest(Request request) {
@@ -17,3 +36,15 @@ Response echoRequest(Request request) {
1736
return Response.notFound('Not found');
1837
}
1938
}
39+
40+
// CORS headers middleware
41+
Middleware _corsHeaders =
42+
createMiddleware(responseHandler: (Response response) {
43+
response = response.change(headers: {
44+
'Access-Control-Allow-Origin': '*',
45+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
46+
'Access-Control-Allow-Headers':
47+
'Origin, X-Requested-With, Content-Type, Accept'
48+
});
49+
return response;
50+
});

build/web/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Put a static site in the web folder to serve it up here!

pubspec.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ packages:
354354
source: hosted
355355
version: "3.0.1"
356356
shelf_static:
357-
dependency: transitive
357+
dependency: "direct main"
358358
description:
359359
name: shelf_static
360360
sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c

pubspec.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ environment:
99
dependencies:
1010
path: ^1.8.0
1111
shelf: ^1.4.0
12+
shelf_static: ^1.1.1
1213

1314
dev_dependencies:
1415
dart_dev: ^4.0.0

0 commit comments

Comments
 (0)