Introduction to Actionhero
Actionhero is a powerful, flexible, and high-performance Node.js API server framework that enables developers to build scalable and feature-rich applications. With its unique plugin architecture, Actionhero simplifies the development of APIs, WebSocket servers, and background tasks, making it an essential tool for modern web development.
Setting up Actionhero
npm install --global actionhero
actionhero generate
npm install
npm start
Creating Your First Action
Actions are the core of your Actionhero API. Here is an example of a simple action:
const { Action } = require('actionhero')
module.exports = class HelloWorld extends Action {
constructor() {
super()
this.name = 'helloWorld'
this.description = 'Returns a greeting'
this.outputExample = { greeting: 'Hello, World!' }
}
async run({ response }) {
response.greeting = 'Hello, World!'
}
}
API Authentication
Secure your API endpoints with authentication:
const { middleware } = require('actionhero')
module.exports = class AuthMiddleware extends middleware {
constructor() {
super()
this.name = 'authMiddleware'
this.global = true
this.priority = 100
}
async run(data) {
if (!data.connection.params.authToken) {
throw new Error('Auth token required')
}
// Verify token logic here
}
}
WebSocket Integration
Leverage WebSockets for real-time communication:
const { Initializer, api } = require('actionhero')
module.exports = class WebSocketInit extends Initializer {
constructor() {
super()
this.name = 'webSocketInit'
}
async initialize() {
api.wss.broadcast('Welcome to the WebSocket server!')
}
}
Background Tasks
Efficiently handle background jobs with Actionhero:
const { Task } = require('actionhero')
module.exports = class SampleTask extends Task {
constructor() {
super()
this.name = 'sampleTask'
this.description = 'Description of your task'
this.frequency = 0 // Run only once
this.queue = 'default'
}
async run(params) {
api.log('Running sample task...')
// Task logic here
}
}
Example Application
Let’s create an example application that ties together the above concepts.
Step 1: Define Routes
const { Route } = require('actionhero')
module.exports = new Route({
path: '/api/hello',
method: 'GET',
action: 'helloWorld'
})
Step 2: Integrate Middleware
const { Middleware } = require('actionhero')
module.exports = new Middleware({
name: 'authMiddleware',
global: true,
priority: 100
})
Step 3: Start WebSocket Server
const { Server } = require('actionhero')
module.exports = new Server({
type: 'websocket',
port: 8080
})
Step 4: Schedule a Background Task
const { Scheduler, Task } = require('actionhero')
module.exports = class MyScheduler extends Scheduler {
constructor() {
super()
}
async start() {
await this.api.tasks.enqueue('sampleTask', {}, 'default')
}
}
module.exports = class SampleTask extends Task {
constructor() {
super()
this.name = 'sampleTask'
this.description = 'This is a sample task'
this.frequency = 60000 // Run every minute
this.queue = 'default'
}
async run(params) {
console.log('Running sample task...')
}
}
By following these examples, you can create a robust, scalable, and maintainable application using Actionhero. With its extensive feature set and plugin architecture, Actionhero is an ideal framework for developing high-performance Node.js applications.
Hash: a96979864c5c94dc2e3037e686cfa8e09523f727406b694e6e068474c95af402