fletch 2.0.0 copy "fletch: ^2.0.0" to clipboard
fletch: ^2.0.0 copied to clipboard

A fast, Express-inspired HTTP framework for Dart. Build production-ready REST APIs with built-in sessions, CORS, rate limiting, and middleware support.

example/fletch_example.dart

import 'dart:async';
import 'dart:io';

import 'package:fletch/fletch.dart';

Future<void> main() async {
  final app = Fletch();

  // Register shared dependencies.
  app.inject<Clock>(SystemClock());

  // Global middleware.
  app.use(app.cors(allowedOrigins: ['http://localhost:3000']));
  app.use(
      app.rateLimiter(maxRequests: 200, window: const Duration(minutes: 1)));
  app.setErrorHandler((err, req, res) {
    print(err);
    res.json({'error': err.toString()}, statusCode: 500);
  });
  // Simple health endpoint.
  app.get('/health', (req, res) {
    res.json({'status': 'ok', 'timestamp': req.container.get<Clock>().now()});
  });

  // Echo JSON payloads back to the client.
  app.post('/echo', (req, res) async {
    final payload = await req.body;
    res.json({'received': payload});
  });

  // Mount a controller for user routes.
  app.useController('/users', UsersController());

  // Mount an isolated admin module.
  final admin = IsolatedContainer(prefix: '/admin');
  admin.use((req, res, next) {
    res.setHeader('X-Isolated', 'admin');
    return next();
  });
  admin.get('/', (req, res) => res.text('Welcome to the admin module'));
  admin.get('/stats', (req, res) async {
    res.json({'uptimeSeconds': ProcessInfo.currentRss});
  });
  admin.mount(app);

  final port = int.parse(Platform.environment['PORT'] ?? '8080');
  await app.listen(port);
  print('dart_express example running on http://localhost:$port');
}

class UsersController extends Controller {
  static final List<Map<String, dynamic>> _users = [
    {'id': 1, 'name': 'Ada'},
    {'id': 2, 'name': 'Linus'},
  ];

  @override
  void registerRoutes(ControllerOptions options) {
    options.get('/', _listUsers);
    options.get('/:id(\\d+)', _getUserById);
  }

  Future<void> _listUsers(Request request, Response response) async {
    response.json({'data': _users});
  }

  Future<void> _getUserById(Request request, Response response) async {
    final id = int.tryParse(request.params['id'] ?? '');
    final user =
        _users.firstWhere((entry) => entry['id'] == id, orElse: () => {});

    if (user.isEmpty) {
      throw NotFoundError('User $id not found');
    }

    response.json({'data': user});
  }
}

abstract class Clock {
  String now();
}

class SystemClock implements Clock {
  @override
  String now() => DateTime.now().toUtc().toIso8601String();
}
4
likes
130
points
147
downloads

Publisher

verified publishermahawarkartikey.in

Weekly Downloads

A fast, Express-inspired HTTP framework for Dart. Build production-ready REST APIs with built-in sessions, CORS, rate limiting, and middleware support.

Homepage
Repository (GitHub)
View/report issues

Topics

#http #server #backend-framework #express #rest-api

Documentation

Documentation

License

MIT (license)

Dependencies

args, async, crypto, get_it, http, logger, meta, mime, uri, uuid, xml

More

Packages that depend on fletch