angel_framework 2.1.1 icon indicating copy to clipboard operation
angel_framework: ^2.1.1 copied to clipboard

A high-powered HTTP server with dependency injection, routing and much more.


import 'package:angel_container/mirrors.dart';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_framework/http.dart';
import 'package:logging/logging.dart';
import 'package:pretty_logging/pretty_logging.dart';

main() async {
  // Logging set up/boilerplate

  // Create our server.
  var app = Angel(
    logger: Logger('angel'),
    reflector: MirrorsReflector(),

  // Index route. Returns JSON.
  app.get('/', (req, res) => 'Welcome to Angel!');

  // Accepts a URL like /greet/foo or /greet/bob.
    (req, res) {
      var name = req.params['name'];
        ..write('Hello, $name!')

  // Pattern matching - only call this handler if the query value of `name` equals 'emoji'.
    ioc((@Query('name', match: 'emoji') String name) => '😇🔥🔥🔥'),

  // Handle any other query value of `name`.
    ioc((@Query('name') String name) => 'Hello, $name!'),

  // Simple fallback to throw a 404 on unknown paths.
  app.fallback((req, res) {
    throw AngelHttpException.notFound(
      message: 'Unknown path: "${req.uri.path}"',

  var http = AngelHttp(app);
  var server = await http.startServer('', 3000);
  var url = 'http://${server.address.address}:${server.port}';
  print('Listening at $url');
  print('Visit these pages to see Angel in action:');
  print('* $url/greet/bob');
  print('* $url/greet/?name=emoji');
  print('* $url/greet/?name=jack');
  print('* $url/nonexistent_page');