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.

الانتقال إلى التثبيت

معلومات المصدر

المستودع
spinspire/recipes
آخر نشاط في المصدر
٥ مايو ٢٠٢٦ في ١٣:٥٧
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٦
التفرعات
٢

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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 // ... }) ```
عرض على GitHub