用途:这是 PocketBase 服务端 JavaScript(pb_hooks)的参考说明,面向需要在 PocketBase 后端编写自定义逻辑的开发者,涵盖自定义路由、事件钩子、定时任务、邮件、HTTP 请求与数据库操作。
主要能力:文件需放在 pb_hooks/*.pb.js,以 .pb.js 结尾,应用启动和热重载时加载。引擎为 goja,支持 ES5.1 与部分 ES6,不支持 import/export、async/await,较旧版本不支持箭头函数,应使用 function(){} 和 CommonJS require()。--hooksPool=25 控制并发 JS goroutine(默认 25),每个处理程序在隔离上下文运行,请求间无共享可变状态。
路由与中间件:用 routerAdd("GET", "/api/hello/{name}", function(e){...}) 添加路由,支持 {name} 路径参数、{path...} 通配、{$} 精确匹配,响应方法有 e.json、e.string、e.html、e.redirect、e.blob、e.stream、e.noContent。请求读取用 e.bindBody、e.request.url.query()、e.request.header.get()、e.findUploadedFiles()、e.auth、e.hasSuperuserAuth()。内置中间件有 $apis.requireAuth()、requireSuperuserAuth()、requireGuestOnly()、bodyLimit()、gzip();全局中间件用 routerUse,须调用 e.next()。
事件钩子:记录生命周期含 Execute、AfterSuccess、AfterError 三类变体,以及 onRecordValidate、onRecordEnrich、onRecordsListRequest、onRecordRequestCreate/Update/Delete;另有认证钩子(密码、OAuth2、OTP、刷新)、实时钩子、文件下载、批量请求、集合创建和应用生命周期 onBootstrap、onTerminate。
数据库与记录:使用 $app.db() 查询构建器与 $dbx 表达式,支持 all/one/execute 与命名参数 {:param},禁止拼接 SQL;事务用 $app.runInTransaction(function(txApp){...})。记录操作用 $app.findRecordById、findFirstRecordByData、findFirstRecordByFilter、findRecordsByFilter、findAllRecords、countRecords,创建用 new Record(collection) 后 $app.save,更新删除同理。
定时任务与邮件:cronAdd("daily_cleanup", "0 3 * * *", function(){...}) 注册,cronRemove 移除,可在仪表盘 Settings > Crons 预览。邮件用 new MailerMessage() 设置 from/to/subject/html 后 $app.newMailClient().send(message),并可用 onMailerRecordVerificationSend 等自定义系统邮件。
HTTP 与其他:$http.send 支持方法、body、headers、timeout,返回 statusCode、json、headers、cookies、body,但不支持流式;可用 FormData 做 multipart 上传。错误类型含 BadRequestError、UnauthorizedError、ForbiddenError、NotFoundError、TooManyRequestsError、InternalServerError、ApiError、ValidationError。全局对象有 $app、$apis、$security、$os、$http、$filesystem、$dbx。
限制:不支持 ES6 模块与 async/await,$http.send 无流式支持,命名参数不可拼接 SQL,每个处理程序无共享状态。其他收费、平台与价格信息暂未提供。