在 Fastify 中, `register` 函数用于注册插件。插件可以是一组封装的路由、服务、插件或者是装饰器等。使用 `register` 可以为应用添加新的功能或改变其默认行为。`register` 函数接受两个参数:插件本身及一个可选的选项对象。 ### 1. 插件 (Plugin) 第一个参数是插件本身,它可以是一个异步函数,该函数接受三个参数: - `fastify` 实例:当前服务器实例的引用。 - `options`:传递给插件的选项对象。 - `done`:一个回调函数,用于声明插件的注册完成。 ### 2. 选项 (Options) 第二个参数是一个可选的选项对象,用于提供给插件额外的配置。 一个 `register` 调用的基本结构如下: ```javascript fastify.register( plugin, // 插件函数 options // 可选的配置对象 ); ``` `options` 对象可以含有以下属性: - `prefix`:一个字符串值,为插件内所有路由添加前缀,很有用当你需要版本化 API 或者有多个相似的路由集合。 - 其他自定义属性:这些属性将传递给插件函数内的 `options` 参数,可以根据插件的需求来设定。不同的插件可能需要不同的选项。 ### 示例: ```javascript fastify.register( require('fastify-plugin'), { prefix: '/api/v1' } // 为这个插件下的所有路由设置前缀 ); // 或者使用 async/await 语法 fastify.register(async (instance, opts) => { instance.get('/route', async (request, reply) => { return { hello: 'world' }; }); }, { prefix: '/api/v1' }); ``` 在第二个例子中,我们定义了一个匿名插件函数并将其注册到 Fastify 实例中,并通过 `options` 对象设置了一个 `prefix`。这意味着,插件内部定义的所有路由都将自动添加 `/api/v1` 作为路径前缀。 ### 注意: - `fastify-plugin`:这是一个可以保证插件注册的声明周期钩子和装饰器在父作用域中也同样可见的工具,通常用于那些需要全局可访问的插件。 - 插件隔离:Fastify 实例是通过原型链继承创建的,这表示每个插件拥有自己的封装作用域。插件内的装饰器、钩子等,不会影响到其他插件或主应用,除非使用了 `fastify-plugin`。 参考 [Fastify 插件文档](https://www.fastify.io/docs/latest/Reference/Plugins/) 可以提供更详细的信息和高级配置选项。