Angel
2.x
2.x
  • Introduction
  • Migration from Angel 1.1.x
    • Rationale - Why a new Version?
    • Framework Changelog
    • 2.0.0 Migration Guide
  • ORM
    • About
    • Basic Functionality
    • Relations
    • Migrations
    • NoSQL
    • PostgreSQL
  • Guides
    • Getting Started
    • Basic Routing
    • Dependency Injection Patterns
    • Installation & Setup
    • Without the Boilerplate
    • Requests & Responses
    • Dependency Injection
    • Basic Routing
    • Request Lifecycle
    • Middleware
    • Controllers
    • Parsing Request Bodies
    • Using Plug-ins
    • Rendering Views
    • Service Basics
    • REST Client
    • Testing
    • Error Handling
    • Pattern Matching and Parameter
    • Command Line
    • Writing a Plugin
  • Example Projects
  • YouTube Tutorials
  • Ecosystem
  • Packages
    • Authentication
    • CORS
    • Database-Agnostic Relations
    • Configuration
    • Database Adapters
      • MongoDB
      • RethinkDB
      • JSON File-based
      • ORM
    • Front-end
      • Mustache Templates
      • Jael template engine
        • Github
        • Basics
        • Custom Elements
        • Strict Resolution
        • Directive: declare
        • Directive: for-each
        • Directive: extend
        • Directive: if
        • Directive: include
        • Directive: switch
      • compiled_mustache-based engine
      • html_builder-based engine
      • Markdown template engine
      • Using Angel with Angular
    • Hot Reloading
    • Pagination
    • Polling
    • Production Utilities
    • Reverse Proxy
    • Router
    • Serialization
    • Service Seeder
    • Static Files
    • Security
    • Server-sent Events
    • shelf Integration
    • Task Engine
    • User Agents
    • Validation
    • Websockets
Powered by GitBook
On this page
  • Using Plug-ins
  • Execution Order
  • Next Up...
  1. Guides

Using Plug-ins

PreviousParsing Request BodiesNextRendering Views

Last updated 6 years ago

Using Plug-ins

Angel is designed to be extensible. As such, it exposes a typedef, AngelConfigurer, that has special privileges within the framework - they act as plug-ins and can be called via app.configure().

Plug-ins simply need to accept an Angel instance as a parameter, and return a Future (the result of which will be ignored, unless it throws an error). Angel instances have several facilities available to be customized, and thus it is easy to use a custom plug-in to bring about desired functionality within your application.

typedef Future AngelConfigurer(Angel app);

As a convention, Angel plug-ins should be hooked up before the call to startServer.

import 'dart:io';
import 'package:angel_framework/angel_framework';

plugin(Angel app) async {
  print("Do stuff here");
}

main() async {
  Angel app = new Angel();
  await app.configure(plugin);
  await app.startServer();
}

Execution Order

app.startupHooks.addAll([
  myPlugin(),
  AngelWebSocket().configureServer,
  fooBarBazQuux()
]);

Likewise, you can add hooks that run just before the app is shutdown, via Angel.shutdownHooks.

Next Up...

Plugins are usually immediately invoked by app.configure(). However, you may run into certain plug-ins that depend on other facilities already being available, or all of your already being mounted. You can set aside a plug-in to be run just before server startupby adding it to app.startupHooks, instead of directly calling app.configure().

Learn how to generate content for clients by .

services
rendering views
Writing a Plug-in
Using Plug-ins
Execution Order
Next Up...