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.

Ir para a instalação

Informações da origem

Repositório
spinspire/recipes
Última atividade na origem
5 de maio de 2026 às 13:57
Idioma detectado do SKILL.md
inglês
Estrelas
16
Forks
2

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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 // ... }) ```
Ver no GitHub