hapi-cron-2

1.0.2 • Public • Published

hapi-cron-2

A Hapi plugin to setup cron jobs that will call predefined server routes at specified times.

Requirements

This plugin is compatible with hapi v17+ and requires Node v16+.

This also requires moduleResolution: nodenext or node16 for typescript support.

Installation

Add hapi-cron-2 as a dependency to your project:

npm install --save hapi-cron-2

Usage

For "type": "module":

import { Server } from "@hapi/hapi";
import HapiCron from "hapi-cron-2";

const server = new Server();

async function allSystemsGo() {
	try {
		await server.register({
			plugin: HapiCron,
			options: {
				jobs: [
					{
						name: "testcron",
						crontab: "*/10 * * * * *",
						timezone: "Europe/London",
						request: {
							method: "GET",
							url: "/test-url",
						},
						onComplete: (res) => {
							console.log(res.result); // 'hello world'
						},
					},
				],
			},
		});

		server.route({
			method: "GET",
			path: "/test-url",
			handler: function (request, h) {
				return "hello world";
			},
		});

		await server.start();
	} catch (err) {
		console.info("there was an error");
	}
}

allSystemsGo();

For "type": "commonjs":

const Hapi = require("hapi");

async function allSystemsGo() {
	try {
		await server.register({
			plugin: await import("hapi-cron-2"),
			options: {
				jobs: [
					{
						name: "testcron",
						crontab: "*/10 * * * * *",
						timezone: "Europe/London",
						request: {
							method: "GET",
							url: "/test-url",
						},
						onComplete: (res) => {
							console.log(res.result); // 'hello world'
						},
					},
				],
			},
		});

		server.route({
			method: "GET",
			path: "/test-url",
			handler: function (request, h) {
				return "hello world";
			},
		});

		await server.start();
	} catch (err) {
		console.info("there was an error");
	}
}

allSystemsGo();

Options

HapiCronOptions

  • jobs: HapiCronJobConfig[] - An array of HapiCronJobConfig options - See below
  • timezone?: string - A valid timezone - optional

Job Options

HapiCronJobConfig

  • name: string - A unique name for the cron job
  • crontab: string - A valid cron value. See cron configuration
  • timezone?: string - A valid timezone - optional. If this is undefined, the HapiCronOptions.timezone will be used. The server's local timezone will be used if both this and the HapiCronOptions.timezone are undefined!
  • request: object - The request object containing the route url path. Other options can also be passed into the request object
    • url - Route path to request
    • method - Request method (defaults to GET) - optional
  • onComplete: (result)=>void - A synchronous function to run after the route has been requested. The function will contain the entire injection result from the request - optional

Cron configuration

This plugin uses the node-cron module to setup the cron job.

Available cron patterns:

Asterisk. E.g. *
Ranges. E.g. 1-3,5
Steps. E.g. */2

Read up on cron patterns here and check https://crontab.guru/ for help writing them. Note the examples in both links have five fields, and 1 minute as the finest granularity, but the node cron module allows six fields, with 1 second as the finest granularity.

Cron Ranges

When specifying your cron values you'll need to make sure that your values fall within the ranges. For instance, some cron's use a 0-7 range for the day of week where both 0 and 7 represent Sunday. We do not.

  • Seconds: 0-59
  • Minutes: 0-59
  • Hours: 0-23
  • Day of Month: 1-31
  • Months: 0-11
  • Day of Week: 0-6

Readme

Keywords

Package Sidebar

Install

npm i hapi-cron-2

Weekly Downloads

2

Version

1.0.2

License

BSD-3-Clause

Unpacked Size

14.2 kB

Total Files

5

Last publish

Collaborators

  • zachhaber