add backend server setup with environment configuration, tile caching, and bus stop fetching functionality
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dotenv/dotenv.dart';
|
||||
import 'package:shelf/shelf.dart' show Middleware, Response;
|
||||
import 'package:rra_backend/rra_backend.dart';
|
||||
import 'package:shelf/shelf.dart';
|
||||
import 'package:shelf/shelf_io.dart' as io;
|
||||
|
||||
Middleware _logger() => (handler) => (request) async {
|
||||
final sw = Stopwatch()..start();
|
||||
final response = await handler(request);
|
||||
sw.stop();
|
||||
final ms = sw.elapsedMilliseconds;
|
||||
print('${request.method} ${response.statusCode} ${ms}ms ${request.url.path}');
|
||||
return response;
|
||||
};
|
||||
|
||||
Middleware _cors() => (handler) => (request) async {
|
||||
if (request.method == 'OPTIONS') {
|
||||
return Response.ok('', headers: _corsHeaders);
|
||||
}
|
||||
final response = await handler(request);
|
||||
return response.change(headers: _corsHeaders);
|
||||
};
|
||||
|
||||
const _corsHeaders = {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'Origin, Content-Type',
|
||||
};
|
||||
|
||||
void main() async {
|
||||
final env = DotEnv(includePlatformEnvironment: true)..load();
|
||||
|
||||
final mapboxToken = env['MAPBOX_ACCESS_TOKEN'];
|
||||
if (mapboxToken == null || mapboxToken.isEmpty) {
|
||||
stderr.writeln('ERROR: MAPBOX_ACCESS_TOKEN not set');
|
||||
exit(1);
|
||||
}
|
||||
|
||||
final port = int.tryParse(env['PORT'] ?? '8080') ?? 8080;
|
||||
|
||||
await TileCache.init();
|
||||
|
||||
final handler = const Pipeline()
|
||||
.addMiddleware(_logger())
|
||||
.addMiddleware(_cors())
|
||||
.addHandler(buildRouter(mapboxToken).call);
|
||||
|
||||
final server = await io.serve(handler, InternetAddress.anyIPv4, port);
|
||||
print('rra_backend listening on :${server.port}');
|
||||
}
|
||||
Reference in New Issue
Block a user