mirror of
https://github.com/strapi/strapi.git
synced 2025-08-19 06:08:50 +00:00
112 lines
31 KiB
HTML
112 lines
31 KiB
HTML
![]() |
<!DOCTYPE html>
|
||
|
<html lang="en-US">
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
|
<title>Back-end Development | Strapi Docs</title>
|
||
|
<meta name="description" content="API creation made simple, secure and fast.">
|
||
|
|
||
|
|
||
|
<link rel="preload" href="/documentation/assets/css/styles.a8210063.css" as="style"><link rel="preload" href="/documentation/assets/js/app.a8210063.js" as="script"><link rel="preload" href="/documentation/assets/js/62.ccacebe2.js" as="script"><link rel="prefetch" href="/documentation/assets/js/28.9b077c15.js"><link rel="prefetch" href="/documentation/assets/css/1.styles.77d89b12.css"><link rel="prefetch" href="/documentation/assets/js/1.77d89b12.js"><link rel="prefetch" href="/documentation/assets/css/2.styles.08038ddb.css"><link rel="prefetch" href="/documentation/assets/js/2.08038ddb.js"><link rel="prefetch" href="/documentation/assets/js/3.4d92d5e3.js"><link rel="prefetch" href="/documentation/assets/js/4.385ae6a0.js"><link rel="prefetch" href="/documentation/assets/js/5.edd21cb3.js"><link rel="prefetch" href="/documentation/assets/js/6.fd6e4b24.js"><link rel="prefetch" href="/documentation/assets/js/7.e1f45fa9.js"><link rel="prefetch" href="/documentation/assets/js/8.dc78e1c2.js"><link rel="prefetch" href="/documentation/assets/js/9.fd6a21e6.js"><link rel="prefetch" href="/documentation/assets/js/10.f9e7d997.js"><link rel="prefetch" href="/documentation/assets/js/11.bfb9de0f.js"><link rel="prefetch" href="/documentation/assets/js/12.124227d1.js"><link rel="prefetch" href="/documentation/assets/js/13.d8092700.js"><link rel="prefetch" href="/documentation/assets/js/14.7cfd4cb8.js"><link rel="prefetch" href="/documentation/assets/js/15.55a20f7c.js"><link rel="prefetch" href="/documentation/assets/js/16.5c84c402.js"><link rel="prefetch" href="/documentation/assets/js/17.1c93d494.js"><link rel="prefetch" href="/documentation/assets/js/18.e1f1758f.js"><link rel="prefetch" href="/documentation/assets/js/19.8d1b00cd.js"><link rel="prefetch" href="/documentation/assets/js/20.856d7bdd.js"><link rel="prefetch" href="/documentation/assets/js/21.6f851286.js"><link rel="prefetch" href="/documentation/assets/js/22.7ddb4e1d.js"><link rel="prefetch" href="/documentation/assets/js/23.15e5a0c3.js"><link rel="prefetch" href="/documentation/assets/js/24.6fdf34d0.js"><link rel="prefetch" href="/documentation/assets/js/25.21c9a549.js"><link rel="prefetch" href="/documentation/assets/js/26.6608295c.js"><link rel="prefetch" href="/documentation/assets/js/27.2c9596ea.js"><link rel="prefetch" href="/documentation/assets/js/29.8ea8ecc1.js"><link rel="prefetch" href="/documentation/assets/js/30.5d2829b8.js"><link rel="prefetch" href="/documentation/assets/js/31.fad00a3a.js"><link rel="prefetch" href="/documentation/assets/js/32.a6900221.js"><link rel="prefetch" href="/documentation/assets/js/33.bbfb3084.js"><link rel="prefetch" href="/documentation/assets/js/34.0eb2f8aa.js"><link rel="prefetch" href="/documentation/assets/js/35.76c29241.js"><link rel="prefetch" href="/documentation/assets/js/36.dfcc07a1.js"><link rel="prefetch" href="/documentation/assets/js/37.173a8112.js"><link rel="prefetch" href="/documentation/assets/js/38.b86fac79.js"><link rel="prefetch" href="/documentation/assets/js/39.a7d50afe.js"><link rel="prefetch" href="/documentation/assets/js/40.0415492d.js"><link rel="prefetch" href="/documentation/assets/js/41.5ef681df.js"><link rel="prefetch" href="/documentation/assets/js/42.fdd80522.js"><link rel="prefetch" href="/documentation/assets/js/43.03b496f2.js"><link rel="prefetch" href="/documentation/assets/js/44.3f55a367.js"><link rel="prefetch" href="/documentation/assets/js/45.6746c3dc.js"><link rel="prefetch" href="/documentation/assets/js/46.ff6bc353.js"><link rel="prefetch" href="/documentation/assets/js/47.53b7147a.js"><link rel="prefetch" href="/documentation/assets/js/48.31a883aa.js"><link rel="prefetch" href="/documentation/assets/js/49.18bd1a60.js"><link rel="prefetch" href="/documentation/assets/js/50.9b6079cd.js"><link rel="prefetch" href="/documentation/assets/js/51.b67aee1b.js"><link rel="prefetch" href="/documentation/assets/js/52.62bc63b6.js"><link rel="prefetch" href="/documentation/assets/js/53.2c567c55.js"><link rel="prefetch" href="/documentation/assets/js/54.6cc10d25.js"><link rel="prefetch" href="/docum
|
||
|
<link rel="stylesheet" href="/documentation/assets/css/styles.a8210063.css"><link rel="stylesheet" href="/documentation/assets/css/1.styles.77d89b12.css"><link rel="stylesheet" href="/documentation/assets/css/2.styles.08038ddb.css">
|
||
|
</head>
|
||
|
<body>
|
||
|
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/documentation/" class="home-link router-link-active"><!----> <span class="site-name">
|
||
|
Strapi Docs
|
||
|
</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"> <a href="https://github.com/strapi/strapi" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||
|
GitHub
|
||
|
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar"><nav class="nav-links"> <a href="https://github.com/strapi/strapi" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||
|
GitHub
|
||
|
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <div><select class="version-selector"><option value="/3.x.x/" selected="selected">Version 3.x.x</option><option value="/1.x.x/">Version 1.x.x</option></select></div> <ul class="sidebar-links"><li><div class="sidebar-group first"><p class="sidebar-heading open"><span>UsefulLinks</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/documentation/3.x.x/" class="sidebar-link">Introduction</a></li><li><a href="https://strapi.io" class="sidebar-link">Strapi Website</a></li><li><a href="https://github.com/strapi/strapi" class="sidebar-link">GitHub Repository</a></li><li><a href="https://github.com/strapi/strapi/blob/master/CONTRIBUTING.md" class="sidebar-link">Contribution Guide</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Getting started</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/documentation/3.x.x/getting-started/installation.html" class="sidebar-link">Installation</a></li><li><a href="/documentation/3.x.x/getting-started/quick-start.html" class="sidebar-link">Quick start</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Globals</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/documentation/3.x.x/api-reference/reference.html" class="sidebar-link">API Reference</a></li><li><a href="/documentation/3.x.x/cli/CLI.html" class="sidebar-link">Command Line Interface (CLI)</a></li><li><a href="/documentation/3.x.x/concepts/concepts.html" class="sidebar-link">Concepts</a></li><li><a href="/documentation/3.x.x/configurations/configurations.html" class="sidebar-link">Configurations</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Guides</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/documentation/3.x.x/guides/authentication.html" class="sidebar-link">Authentication</a></li><li><a href="/documentation/3.x.x/guides/controllers.html" class="sidebar-link">Controllers</a></li><li><a href="/documentation/3.x.x/guides/deployment.html" class="sidebar-link">Deployment</a></li><li><a href="/documentation/3.x.x/guides/email.html" class="sidebar-link">Email</a></li><li><a href="/documentation/3.x.x/guides/filters.html" class="sidebar-link">Filters</a></li><li><a href="/documentation/3.x.x/guides/graphql.html" class="sidebar-link">GraphQL</a></li><li><a href="/documentation/3.x.x/guides/i18n.html" class="sidebar-link">Internationalization</a></li><li><a href="/documentation/3.x.x/guides/models.html" class="sidebar-link">Models</a></li><li><a href="/documentation/3.x.x/guides/policies.html" class="sidebar-link">Policies</a></li><li><a href="/documentation/3.x.x/guides/public-assets.html" class="sidebar-link">Public Assets</a></li><li><a href="/documentation/3.x.x/guides/requests.html" class="sidebar-link">Request</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Advanced</span> <!----></p> <ul class="sidebar-group-items"><li><a href="/documentation/3.x.x/advanced/customize-admin.html" class="sidebar-link">Admin panel</a></li><li><a href="/documentation/3.x.x/advanced/hooks.html" class="sidebar-link">Hooks</a></li><li><a href="/documentation/3.x.x/advanced/logging.html" class="sidebar-link">Logging</a></li><li><a href="/documentation/3.x.x/advanced/middlewares.html" class="sidebar-link">Middlewares</a></li><li><a href="/documentation/3.x.x/advanced/usage-tracking.html" class="sidebar-link">Usage tracking</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Help</span> <!----></p> <ul class="sidebar-group-items"><li><a href="https://github.com/stra
|
||
|
<span class="token property">"method"</span><span class="token operator">:</span> <span class="token string">"GET"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"path"</span><span class="token operator">:</span> <span class="token string">"/my-plugin-route"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"handler"</span><span class="token operator">:</span> <span class="token string">"MyPlugin.action"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"prefix"</span><span class="token operator">:</span> <span class="token boolean">false</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><h2 id="cli"><a href="#cli" aria-hidden="true" class="header-anchor">#</a> CLI</h2> <p>The CLI can be used to generate files in the plugins folders.</p> <p>Please refer to the <a href="/documentation/3.x.x/cli/CLI.html">CLI documentation</a> for more informations.</p> <h2 id="controllers"><a href="#controllers" aria-hidden="true" class="header-anchor">#</a> Controllers</h2> <p>Controllers contain functions executed according to the requested route.</p> <p>Please refer to the <a href="/documentation/3.x.x/guides/controllers.html">Controllers documentation</a> for more informations.</p> <h2 id="models"><a href="#models" aria-hidden="true" class="header-anchor">#</a> Models</h2> <p>A plugin can have its own models.</p> <h3 id="table-collection-naming"><a href="#table-collection-naming" aria-hidden="true" class="header-anchor">#</a> Table/Collection naming</h3> <p>Sometimes it happens that the plugins inject models that have the same name as yours. Let's take a quick example.</p> <p>You already have <code>User</code> model defining in your <code>./api/user/models/User.settings.json</code> API. And you decide to install the <code>Users & Permissions</code> plugin. This plugin also contains a <code>User</code> model. To avoid the conflicts, the plugins' models are not globally exposed which means you cannot access to the plugin's model like this:</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
findUser<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>params<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||
|
<span class="token comment">// This `User` global variable will always make a reference the User model defining in your `./api/xxx/models/User.settings.json`.</span>
|
||
|
<span class="token keyword">return</span> <span class="token keyword">await</span> User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><p>Also, the table/collection name won't be <code>users</code> because you already have a <code>User</code> model. That's why, the framework will automatically prefix the table/collection name for this model with the name of the plugin. Which means in our example, the table/collection name of the <code>User</code> model of our plugin <code>Users & Permissions</code> will be <code>users-permissions_users</code>. If you want to force the table/collection name of the plugin's model, you can add the <code>collectionName</code> attribute in your model.</p> <p>Please refer to the <a href="/documentation/3.x.x/guides/models.html">Models documentation</a> for more informations.</p> <h2 id="policies"><a href="#policies" aria-hidden="true" class="header-anchor">#</a> Policies</h2> <h3 id="global-policies"><a href="#global-policies" aria-hidden="true" class="header-anchor">#</a> Global policies</h3> <p>A plugin can also use a globally exposed policy in the current Strapi project.</p> <div class="language-json extra-class"><pre class="language-json"><code><span class="token punctuation">{</span>
|
||
|
<span class="token property">"routes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
||
|
<span class="token punctuation">{</span>
|
||
|
<span class="token property">"method"</span><span class="token operator">:</span> <span class="token string">"GET"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"path"</span><span class="token operator">:</span> <span class="token string">"/"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"handler"</span><span class="token operator">:</span> <span class="token string">"MyPlugin.index"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
||
|
<span class="token property">"policies"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
||
|
<span class="token string">"global.isAuthenticated"</span>
|
||
|
<span class="token punctuation">]</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">]</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><h3 id="plugin-policies"><a href="#plugin-policies" aria-hidden="true" class="header-anchor">#</a> Plugin policies</h3> <p>A plugin can have its own policies, such as adding security rules. For instance, if the plugin includes a policy named <code>isAuthenticated</code>, the syntax to use this policy would be:</p> <div class="language-json extra-class"><pre class="language-json"><code><span class="token punctuation">{</span>
|
||
|
<span class="token property">"routes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
||
|
<span class="token punctuation">{</span>
|
||
|
<span class="token property">"method"</span><span class="token operator">:</span> <span class="token string">"GET"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"path"</span><span class="token operator">:</span> <span class="token string">"/"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"handler"</span><span class="token operator">:</span> <span class="token string">"MyPlugin.index"</span><span class="token punctuation">,</span>
|
||
|
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
|
||
|
<span class="token property">"policies"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
|
||
|
<span class="token string">"plugins.myPlugin.isAuthenticated"</span>
|
||
|
<span class="token punctuation">]</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">]</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><p>Please refer to the <a href="/documentation/3.x.x/guides/policies.html">Policies documentation</a> for more informations.</p> <h2 id="orm-queries"><a href="#orm-queries" aria-hidden="true" class="header-anchor">#</a> ORM queries</h2> <p>Strapi supports multiple ORMs in order to let the users choose the database management system that suits their needs. Hence, each plugin must be compatible with at least one ORM. Each plugin contains a folder named <code>queries</code> in <code>./plugins/**/api/queries</code>. A folder must be created for each ORM (eg. <code>mongoose</code>) with a file named <code>mongoose.js</code> which exports the Mongoose ORM related queries.</p> <p>The queries are accessible through the <code>strapi.query()</code> method, which automatically contains the queries according to the ORM used by the model.</p> <h3 id="example"><a href="#example" aria-hidden="true" class="header-anchor">#</a> Example</h3> <p>Mongoose ORM queries definition:</p> <p><strong>Path —</strong> <code>./plugins/my-plugin/api/config/queries/mongoose/index.js</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
getUsers<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>params<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||
|
<span class="token keyword">return</span> User<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><p>Bookshelf ORM queries definition:</p> <p><strong>Path —</strong> <code>./plugins/my-plugin/api/config/queries/bookshelf/index.js</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
getUsers<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>params<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||
|
<span class="token keyword">return</span> User<span class="token punctuation">.</span><span class="token function">fetchAll</span><span class="token punctuation">(</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><p>Usage from the plugin:</p> <p><strong>Path —</strong> <code>./plugins/my-plugin/api/controllers/index.js</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
getUsers<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||
|
<span class="token comment">// Get parameters from the request</span>
|
||
|
<span class="token keyword">const</span> <span class="token punctuation">{</span> limit<span class="token punctuation">,</span> sort <span class="token punctuation">}</span> <span class="token operator">=</span> ctx<span class="token punctuation">.</span>request<span class="token punctuation">.</span>query<span class="token punctuation">;</span>
|
||
|
|
||
|
<span class="token comment">// Get the list of users using the plugins queries</span>
|
||
|
<span class="token keyword">const</span> users <span class="token operator">=</span> <span class="token keyword">await</span> strapi<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'User'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getUsers</span><span class="token punctuation">(</span><span class="token punctuation">{</span> limit<span class="token punctuation">,</span> sort <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
|
||
|
<span class="token comment">// Send the list of users as response</span>
|
||
|
ctx<span class="token punctuation">.</span>body <span class="token operator">=</span> users<span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><h3 id="advanced-usage"><a href="#advanced-usage" aria-hidden="true" class="header-anchor">#</a> Advanced usage</h3> <p>Each function in the query file is bound with the ORM's model. It means that you can create generic query very easily. This feature is useful for CRUD such as we did in the <a href="https://github.com/strapi/strapi/tree/master/packages/strapi-plugin-content-manager/config/queries" target="_blank" rel="noopener noreferrer">Content Manager plugin<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a>.</p> <p>Mongoose ORM generic queries:</p> <p><strong>Path —</strong> <code>./plugins/my-plugin/api/config/queries/mongoose/index.js</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
getAll<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>params<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||
|
<span class="token comment">// this refers to the Mongoose model called in the query</span>
|
||
|
<span class="token comment">// ex: strapi.query('User').getAll(), this will be equal to the User Mongoose model.</span>
|
||
|
<span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><p>Bookshelf ORM generic queries:</p> <p><strong>Path —</strong> <code>./plugins/my-plugin/api/config/queries/bookshelf/index.js</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
getAll<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>params<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||
|
<span class="token comment">// this refers to the Bookshelf model called in the query</span>
|
||
|
<span class="token comment">// ex: strapi.query('User').getAll(), this will be equal to the User Bookshelf model.</span>
|
||
|
<span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">fetchAll</span><span class="token punctuation">(</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><p>Usage from the plugin:</p> <p><strong>Path —</strong> <code>./plugins/my-plugin/api/controllers/index.js</code>.</p> <div class="language-js extra-class"><pre class="language-js"><code>module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
|
||
|
getUsers<span class="token punctuation">:</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
|
||
|
<span class="token comment">// Get parameters from the request</span>
|
||
|
<span class="token keyword">const</span> <span class="token punctuation">{</span> limit<span class="token punctuation">,</span> sort <span class="token punctuation">}</span> <span class="token operator">=</span> ctx<span class="token punctuation">.</span>request<span class="token punctuation">.</span>query<span class="token punctuation">;</span>
|
||
|
|
||
|
<span class="token comment">// Get the list of users using the plugin's queries</span>
|
||
|
<span class="token keyword">const</span> users <span class="token operator">=</span> <span class="token keyword">await</span> strapi<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string">'User'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAll</span><span class="token punctuation">(</span><span class="token punctuation">{</span> limit<span class="token punctuation">,</span> sort <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
|
||
|
<span class="token comment">// Send the list of users as response</span>
|
||
|
ctx<span class="token punctuation">.</span>body <span class="token operator">=</span> users<span class="token punctuation">;</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
<span class="token punctuation">}</span>
|
||
|
</code></pre></div><hr></div> <div class="page-edit"><div class="edit-link"><a href="https://github.com/strapi/strapi/edit/master/docs/3.x.x/plugin-development/backend-development.md" target="_blank" rel="noopener noreferrer">Improve this page</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <!----></div> <!----> </div></div></div>
|
||
|
<script src="/documentation/assets/js/62.ccacebe2.js" defer></script><script src="/documentation/assets/js/app.a8210063.js" defer></script>
|
||
|
</body>
|
||
|
</html>
|