Strapi:全球模型从何而来?

Strapi: where global models comes from?

例如,我通过管理面板创建了内容类型 "Item"。在 /api/item/services/Item.js 中,我看到类似

的代码
 fetchAll: (params) => {
const convertedParams = strapi.utils.models.convertParams('item', params);

return Item
  .find()
  .where(convertedParams.where)
  .sort(convertedParams.sort)
  .skip(convertedParams.start)
  .limit(convertedParams.limit)
  .populate(_.keys(_.groupBy(_.reject(strapi.models.item.associations, {autoPopulate: false}), 'alias')).join(' '));
},

但是Item没有导入,所以是全局的。

  1. 我想知道这个全局 Item 是在什么时候创建的?
  2. 全局Itemstrapi.models.item有什么区别?
  3. 我正在通过中间件提供 GraphQL 支持,因此我会将模型放在上下文对象中。使用 item 模型的最佳方式是什么:如服务、strapi.models.itemItem

谢谢。

PS:如果 Strapi 的一位作者会读到这篇文章,请问您为什么要如此大量地使用全局对象?

  1. 全局模型在 strapi-mongoosestrapi-bookshelf 上创建(取决于您使用的数据库)我们在这个节点模块中创建您的模型实例。

  2. 两者没有区别Item === strapi.models.item

  3. 我认为你的中间件会有动态逻辑,所以我建议你使用strapi.modelsstrapi.plugins[plugin].models

您可以自定义模型的全局名称以便更易于使用 https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#models 因此全局名称可以更改,但 strapi 对象中的路径不会更改。