Skip to content

bytedogssyndicate/express-hooked

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Express-Hooked

Express-Hooked is a powerful extension for Express.js that brings a comprehensive hooks and filters system to your applications. Inspired by WordPress hooks system, it allows developers to extend functionality at various points in the request lifecycle without modifying core code.

Why Choose Express-Hooked?

  • Flexible Architecture: Hook into request processing at multiple stages
  • Non-Intrusive: Extend functionality without modifying existing code
  • Priority System: Control execution order with priority levels
  • Namespace Support: Organize hooks with namespaces for better maintainability
  • Easy Integration: Simple setup with minimal configuration

Installation

npm install express-hooked

Quick Start

const express = require('express');
const ExpressHooked = require('express-hooked');

const app = express();
const port = 3000;

// Initialize ExpressHooked
const expressHooks = new ExpressHooked(app);

// Register an action hook
expressHooks.addAction('request_started', (req, res, next) => {
  console.log(`Request received: ${req.method} ${req.url}`);
  next();
});

// Register a filter hook
expressHooks.addFilter('modify_response_data', (data) => {
  return {
    ...data,
    processedBy: 'ExpressHooked',
    timestamp: new Date().toISOString()
  };
});

// Example route using filters
app.get('/', (req, res) => {
  let responseData = { message: 'Hello World!' };
  responseData = expressHooks.applyFilters('modify_response_data', responseData);
  
  res.json(responseData);
});

// Initialize hooks integration
expressHooks.init();

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

Key Features

Actions

Actions allow you to execute code at specific points without modifying data:

expressHooks.addAction('request_started', (req, res, next) => {
  // Do something when request starts
  next();
});

Filters

Filters allow you to modify data flowing through your application:

expressHooks.addFilter('modify_response_data', (data) => {
  // Modify and return the data
  return { ...data, customField: 'value' };
});

Priority System

Control execution order with priority levels (lower numbers execute first):

// This executes first (higher priority)
expressHooks.addAction('request_started', callback, 5);

// This executes later (lower priority)  
expressHooks.addAction('request_started', callback, 15);

Namespaces

Organize your hooks with namespaces:

// Register hook with namespace
expressHooks.addAction('myplugin::before_request', callback);

// Execute namespaced hook
expressHooks.doAction('myplugin::before_request', req, res);

Use Cases

  • Authentication & Authorization: Hook into request processing to validate credentials
  • Logging & Analytics: Track requests, responses, and performance metrics
  • Caching: Implement caching strategies at different levels
  • API Transformation: Modify API responses before sending to clients
  • Error Handling: Centralized error handling with custom logic
  • Rate Limiting: Implement rate limiting based on custom criteria

Contributing

We welcome contributions! Please see our contributing guidelines for more information.

License

Apache 2.0

Repository: https://gitlab.com/bytedogssyndicate1/express-hooked

About

Express-Hooked is an extension for Express.js that adds a hooks and filters system inspired by WordPress, letting developers extend functionality at multiple points in the request lifecycle without modifying core code.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors