Skip to main content

pb-extend

Extend PocketBase with custom hooks and routes in JS or Go. Use when user wants to add custom API routes, modify PocketBase behavior, or add server-side logic.

Aller à l'installation

Informations de source

Dépôt
spinspire/recipes
Dernière activité de la source
5 mai 2026 à 13:57
Langue détectée de SKILL.md
anglais
Étoiles
16
Forks
2

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
pb-extend
description
Extend PocketBase with custom hooks and routes in JS or Go. Use when user wants to add custom API routes, modify PocketBase behavior, or add server-side logic.
license
MIT
allowed-tools
Bash
# PocketBase Extending Reference: https://pocketbase.io/docs/js-overview/ | https://pocketbase.io/docs/go-overview/ Extend PocketBase with custom hooks and routes in JS or Go. ## JS Hooks (pb_hooks/) Drop `*.pb.js` files in `pb_hooks/`: ```javascript // pb_hooks/myhook.pb.js /// <reference path="../pb_data/types.d.ts" /> router.api.post('/custom-route', async (e) => { const body = e.request.body // ... process return e.json({ result: 'ok' }) }) // On record create onRecordCreateRequest((e) => { if (!e.record.get('email').endsWith('@company.com')) { return e.badRequest('Use company email') } return e.next() }) ``` **Rules:** - Always call `e.next()` / `e.Next()` in hooks - Variables outside handlers are undefined at runtime - Use `require()` for shared config (CJS only, no ESM) ## Go Hooks (migrations/) Versioned migrations in `migrations/`: ```go package migrations import ( "github.com/pocketbase/pocketbase/migrations" "github.com/pocketbase/pocketbase/tools/types" ) func init() { migrations.Register(func(app *pocketbase.App) error { // Custom logic return nil }, func(app *pocketbase.App) error { // Rollback logic return nil }) } ``` ## Custom Routes ```javascript // Add to pb_hooks router.api.post('/api/myapp/send-email', async (e) => { const data = await e.request.json() await sendEmail(data.to, data.subject) return e.json({ sent: true }) }, middleware.RequireAuth()) ``` ## Key Hook Events | Event | Purpose | |-------|---------| | `onRecordCreateRequest` | Before record creation | | `onRecordUpdateRequest` | Before record update | | `onRecordDeleteRequest` | Before record deletion | | `OnRecordEnrich` | Shape response (incl. realtime) | | `OnRecordRequest` | HTTP-only response shaping | | `OnBeforeServe` | Modify router before serving | ## Migrations **Auto-migrate**: Collections changed via Admin UI auto-generate migrations in `pb_migrations/` **Manual JS migration**: ```javascript // pb_migrations/1700000000_seed_data.js migrate((up, down) => { up((db) => { db.createCollection('categories', { /* ... */ }) }) down((db) => { db.dropCollection('categories') }) }) ``` ## Useful Settings ```javascript // Read at runtime const settings = require('../pb_settings/config.js') // Access app in hooks router.use(async (e) => { const app = e.app // ... }) ```
Voir sur GitHub