# 服务

服务是一组可重用的函数。它们对于尊重 "don’t repeat yourself" (DRY) 编程概念和简化控制器 逻辑特别有用。

# 实现

服务可以手动生成或添加。Strapi提供了一个“createCoreService”工厂功能,该函数自动生成核心服务,并允许构建自定义服务或扩展或替换生成的服务

# 添加新服务

以下方式可以实现新服务:

要手动创建服务,请导出返回服务实现的工厂函数(即带有方法的对象)。此工厂函数接收 strapi 实例:

🤓 Entity Service API

要开始创建自己的服务,请参阅 Entity Service API 文档中的 Strapi 内置函数。

电子邮件服务示例

服务的目标是存储可重用的函数。email 服务可用于从我们的代码库中的不同函数发送电子邮件:

该服务现在可以通过 strapi.service('api::email.email').send(...args) 的全局变量。它可以在代码库的另一部分中使用,如在以下控制器中:

✏️ NOTE

当创建新的 content-type 时,Strapi 会使用占位符代码构建一个通用服务,该代码随时可以自定义。

# 扩展核心服务

核心服务是为每个内容类型创建的,可以由 controllers 使用,通过 Strapi 项目执行可重用的逻辑。可以自定义核心服务以实现您自己的逻辑。下面的代码示例应该可以帮助您入门。

💡 TIP

核心服务可以完全替换为创建自定义服务,并将其命名为与核心服务相同的名称(例如,find, findOne, create, update, 或 delete)。

集合类型示例
单一类型示例

# 用法

创建服务后,可以从 controllers 或其他服务访问它:

// access an API service
strapi.service('api::apiName.serviceName');
// access a plugin service
strapi.service('plugin::pluginName.serviceName');

💡 TIP

要列出所有可用的服务,请运行 yarn strapi services:list.

:::