Skip to main content

@gasket/plugin-express Examples

This document provides working examples for all exported interfaces in the @gasket/plugin-express package.

Plugin Configuration

Basic Plugin Usage

// gasket.js
import { makeGasket } from '@gasket/core';
import pluginExpress from '@gasket/plugin-express';

export default makeGasket({
plugins: [
pluginExpress
]
});

Express Configuration

// gasket.js
import { makeGasket } from '@gasket/core';
import pluginExpress from '@gasket/plugin-express';

export default makeGasket({
plugins: [
pluginExpress
],
express: {
compression: false,
trustProxy: true
}
});

Advanced Trust Proxy Configuration

// gasket.js
import { makeGasket } from '@gasket/core';
import pluginExpress from '@gasket/plugin-express';

export default makeGasket({
plugins: [
pluginExpress
],
express: {
compression: true,
trustProxy: (ip) => {
// Trust only specific IP addresses
return ip === '127.0.0.1' || ip === '::1';
}
}
});

Lifecycle Hooks

express

Basic route definition:

// plugins/routes-plugin.js
export default {
name: 'routes-plugin',
hooks: {
express(gasket, app) {
app.get('/api/health', (req, res) => {
res.status(200).json({ status: 'OK' });
});
}
}
};

Multiple routes and middleware:

// plugins/api-plugin.js
export default {
name: 'api-plugin',
hooks: {
express(gasket, app) {
// Add route-specific middleware
app.use('/api', (req, res, next) => {
req.timestamp = Date.now();
next();
});

// Define multiple routes
app.get('/api/users', (req, res) => {
res.json({ users: [] });
});

app.post('/api/users', (req, res) => {
res.status(201).json({ message: 'User created' });
});

app.get('/api/users/:id', (req, res) => {
res.json({ id: req.params.id, timestamp: req.timestamp });
});
}
}
};

errorMiddleware

Basic error handling:

// plugins/error-handler-plugin.js
export default {
name: 'error-handler-plugin',
hooks: {
errorMiddleware(gasket) {
return (err, req, res, next) => {
gasket.logger.error('Express error:', err);
res.status(500).json({
error: 'Internal Server Error',
message: err.message
});
};
}
}
};

Multiple error middleware:

// plugins/multiple-error-handlers-plugin.js
export default {
name: 'multiple-error-handlers-plugin',
hooks: {
errorMiddleware(gasket) {
return [
// Log errors
(err, req, res, next) => {
gasket.logger.error('Error occurred:', {
error: err.message,
stack: err.stack,
url: req.url,
method: req.method
});
next(err);
},
// Handle specific error types
(err, req, res, next) => {
if (err.name === 'ValidationError') {
return res.status(400).json({
error: 'Validation Error',
details: err.details
});
}
next(err);
},
// Final error handler
(err, req, res, next) => {
res.status(err.status || 500).json({
error: process.env.NODE_ENV === 'production'
? 'Internal Server Error'
: err.message
});
}
];
}
}
};