扩展入口点
端点的入口点是扩展包的 src/ 文件夹中的 index 文件。 它导出一个注册函数来注册一个或多个自定义路由。 您的端点的每个路由都将是 /<extension-name>
的子路由。
扩展名 扩展名称通常是部署时放置扩展的文件夹的名称。
入口点示例:
js
export default (router) => {
router.get('/', (req, res) => res.send('Hello, World!'))
}
或者,您可以导出配置对象以自定义根路由:
js
export default {
id: 'greet',
handler: (router) => {
router.get('/', (req, res) => res.send('Hello, World!'))
router.get('/intro', (req, res) => res.send('Nice to meet you.'))
router.get('/goodbye', (req, res) => res.send('Goodbye!'))
},
}
此端点的路由可在“/greet”、“/greet/intro”和“/greet/goodbye”中访问。
Available Options
id
— 此端点的唯一键。 您的端点的每个路由都将是/<id>
的子路由。handler
— 端点的注册处理函数。
Register Function
register 函数接收两个参数 router
和 context
。 router
是一个 Express 路由器实例。 context
是具有以下属性的对象:
services
— 所有 API 内部服务。exceptions
— 可用于抛出“适当”错误的 API 异常对象。database
— 连接到当前数据库的 Knex 实例。getSchema
— 读取服务中使用的完整可用模式的异步函数env
— 解析的环境变量。logger
— Pino 实例。emitter
— 事件发射器 可用于触发其他扩展的自定义事件的实例。
事件循环
使用发射器实现自定义事件时,请确保您永远不会直接或间接发射您的钩子当前正在处理的相同事件,因为这会导致无限循环!
Example: Recipes
js
export default (router, { services, exceptions }) => {
const { ItemsService } = services
const { ServiceUnavailableException } = exceptions
router.get('/', (req, res, next) => {
const recipeService = new ItemsService('recipes', { schema: req.schema, accountability: req.accountability })
recipeService
.readByQuery({ sort: ['name'], fields: ['*'] })
.then(results => res.json(results))
.catch((error) => {
return next(new ServiceUnavailableException(error.message))
})
})
}