mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 09:56:44 +00:00 
			
		
		
		
	 28f1d6df86
			
		
	
	
		28f1d6df86
		
			
		
	
	
	
	
		
			
			* Cleanup shelljs Signed-off-by: Alexandre Bodin <bodin.alex@gmail.com> * Bump koa-session from 5.13.1 to 6.0.0 (#7254) Bumps [koa-session](https://github.com/koajs/session) from 5.13.1 to 6.0.0. - [Release notes](https://github.com/koajs/session/releases) - [Changelog](https://github.com/koajs/session/blob/master/History.md) - [Commits](https://github.com/koajs/session/compare/5.13.1...6.0.0) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix #7252: fix relation name fix regression issue due to pull #7204 Signed-off-by: Akash P <aksdevac@gmail.com> * v3.1.3 * Add React Integration * Remove character * Created a new component for less code * Review modifications * Review modifications 2 * Add Vue.js, Next.js, Nuxt.js, Gatsby and GraphQL inte * Change Select with Checkboxes * Remove useless fonction in Next.js * Update Next.js * Update Next.js 2 * Update Vue.js and Nuxt.js * Update React and Next.js * Update Post example * Update all * Last reviews Co-authored-by: Alexandre Bodin <bodin.alex@gmail.com> Co-authored-by: Alexandre BODIN <alexandrebodin@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Akash P <aksdevac@gmail.com>
		
			
				
	
	
		
			776 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			776 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Getting Started with Nuxt.js
 | |
| 
 | |
| This integration guide is following the [Getting started guide](../getting-started/quick-start.html). We assume that you have completed [Step 8](../getting-started/quick-start.html#_8-consume-the-content-type-s-api) and therefore can consume the API by browsing this [url](http://localhost:1337/restaurants).
 | |
| 
 | |
| If you haven't gone through the getting started guide, the way you request a Strapi API with [Nuxt.js](https://nuxtjs.org/) remains the same except that you will not fetch the same content.
 | |
| 
 | |
| ### Create a Nuxt.js app
 | |
| 
 | |
| Create a basic Nuxt.js application with [create-nuxt-app](https://github.com/nuxt/create-nuxt-app).
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| ::: tab yarn
 | |
| 
 | |
| ```bash
 | |
| yarn create nuxt-app nuxtjs-app
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab npx
 | |
| 
 | |
| ```bash
 | |
| npx create-nuxt-app nuxtjs-app
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ### Use an HTTP client
 | |
| 
 | |
| Many HTTP clients are available but in this documentation we'll use [Axios](https://github.com/axios/axios) and [Fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).
 | |
| 
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| ::: tab @nuxtjs/strapi
 | |
| 
 | |
| For this example we are using the awesome [@nuxt/strapi](https://strapi.nuxtjs.org/) module.
 | |
| 
 | |
| 
 | |
| ```bash
 | |
| yarn add @nuxtjs/strapi
 | |
| ```
 | |
| 
 | |
|   - Add `@nuxtjs/strapi` to the module section of `nuxt.config.js` with the following settings
 | |
| 
 | |
| ```js
 | |
| modules: ['@nuxtjs/strapi'],
 | |
| strapi: {
 | |
|   entities: ['restaurants', 'categories'],
 | |
|   url: 'http://localhost:1337'
 | |
| },
 | |
| ```
 | |
| 
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab axios
 | |
| 
 | |
| ```bash
 | |
| yarn add axios
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab fetch
 | |
| 
 | |
| No installation needed
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ### GET Request your collection type
 | |
| 
 | |
| Execute a GET request on the `restaurant` Collection Type in order to fetch all your restaurants.
 | |
| 
 | |
| Be sure that you activated the `find` permission for the `restaurant` Collection Type.
 | |
| 
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| ::: tab @nuxtjs/strapi
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| try {
 | |
|   await this.$strapi.find('restaurants')
 | |
| } catch (error) {
 | |
|   console.log(error);
 | |
| }
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab axios
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| import axios from 'axios'
 | |
| 
 | |
| axios.get('http://localhost:1337/restaurants')
 | |
|   .then(response => {
 | |
|     console.log(response);
 | |
|   })
 | |
| ```
 | |
| :::
 | |
| 
 | |
| ::: tab fetch
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| fetch("http://localhost:1337/restaurants", {
 | |
|   method: "GET",
 | |
|   headers: {
 | |
|      'Content-Type': 'application/json'
 | |
|   },
 | |
| }).then(response => response.json())
 | |
|   .then(data => console.log(data));
 | |
| ```
 | |
| :::
 | |
| 
 | |
| *Response*
 | |
| 
 | |
| ```json
 | |
| [{
 | |
|   "id": 1,
 | |
|   "name": "Biscotte Restaurant",
 | |
|   "description": "Welcome to Biscotte restaurant! Restaurant Biscotte offers a cuisine based on fresh, quality products, often local, organic when possible, and always produced by passionate producers.",
 | |
|   "created_by": {
 | |
|     "id": 1,
 | |
|     "firstname": "Paul",
 | |
|     "lastname": "Bocuse",
 | |
|     "username": null
 | |
|   },
 | |
|   "updated_by": {
 | |
|     "id": 1,
 | |
|     "firstname": "Paul",
 | |
|     "lastname": "Bocuse",
 | |
|     "username": null
 | |
|   },
 | |
|   "created_at": "2020-07-31T11:37:16.964Z",
 | |
|   "updated_at": "2020-07-31T11:37:16.975Z",
 | |
|   "categories": [{
 | |
|     "id": 2,
 | |
|     "name": "French Food",
 | |
|     "created_by": 1,
 | |
|     "updated_by": 1,
 | |
|     "created_at": "2020-07-31T11:36:23.164Z",
 | |
|     "updated_at": "2020-07-31T11:36:23.172Z"
 | |
|   }]
 | |
| }]
 | |
| ```
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ### Example
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| ::: tab @nuxt/strapi
 | |
| 
 | |
| `./pages/index.vue`
 | |
| 
 | |
| ```js
 | |
| <template>
 | |
|   <div class="container">
 | |
|     <div v-if="error">
 | |
|       {{ error }}
 | |
|     </div>
 | |
|     <ul v-else>
 | |
|       <li v-for="restaurant in restaurants" :key="restaurant.id">
 | |
|         {{ restaurant.name }}
 | |
|       </li>
 | |
|     </ul>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: 'App',
 | |
|   data () {
 | |
|     return {
 | |
|       restaurants: [],
 | |
|       error: null
 | |
|     }
 | |
|   },
 | |
|   async mounted () {
 | |
|     try {
 | |
|       this.restaurants = await this.$strapi.find('restaurants')
 | |
|     } catch (error) {
 | |
|       this.error = error
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab axios
 | |
| 
 | |
| `./pages/index.vue`
 | |
| 
 | |
| ```js
 | |
| <template>
 | |
|   <div class="container">
 | |
|     <div v-if="error">
 | |
|       {{ error }}
 | |
|     </div>
 | |
|     <ul v-else>
 | |
|       <li v-for="restaurant in restaurants" :key="restaurant.id">
 | |
|         {{ restaurant.name }}
 | |
|       </li>
 | |
|     </ul>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import axios from 'axios'
 | |
| 
 | |
| export default {
 | |
|   name: 'App',
 | |
|   data () {
 | |
|     return {
 | |
|       restaurants: [],
 | |
|       error: null
 | |
|     }
 | |
|   },
 | |
|   async mounted () {
 | |
|     try {
 | |
|       const response = await axios.get('http://localhost:1337/restaurants')
 | |
|       this.restaurants = response.data
 | |
|     } catch (error) {
 | |
|       this.error = error;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab fetch
 | |
| 
 | |
| `./pages/index.vue`
 | |
| 
 | |
| ```js
 | |
| <template>
 | |
|   <div id="app">
 | |
|     <div v-if="error">
 | |
|       {{ error }}
 | |
|     </div>
 | |
|     <ul v-else>
 | |
|       <li v-for="restaurant in restaurants" :key="restaurant.id">
 | |
|         {{ restaurant.name }}
 | |
|       </li>
 | |
|     </ul>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| 
 | |
| export default {
 | |
|   name: 'App',
 | |
|   data () {
 | |
|     return {
 | |
|       restaurants: [],
 | |
|       error: null,
 | |
|       headers: {'Content-Type': 'application/json'}
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     parseJSON: function (resp) {
 | |
|       return (resp.json ? resp.json() : resp);
 | |
|     },
 | |
|     checkStatus: function (resp) {
 | |
|       if (resp.status >= 200 && resp.status < 300) {
 | |
|         return resp;
 | |
|       }
 | |
|       return this.parseJSON(resp).then((resp) => {
 | |
|         throw resp;
 | |
|       });
 | |
|     }
 | |
|   },
 | |
|   async mounted () {
 | |
|     try {
 | |
|       const response = await fetch("http://localhost:1337/restaurants", {
 | |
|         method: 'GET',
 | |
|         headers: this.headers,
 | |
|       }).then(this.checkStatus)
 | |
|         .then(this.parseJSON);
 | |
|         this.restaurants = response
 | |
|     } catch (error) {
 | |
|       this.error = error
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ### POST Request your collection type
 | |
| 
 | |
| Execute a POST request on the `restaurant` Collection Type in order to create a restaurant.
 | |
| 
 | |
| Be sure that you activated the `create` permission for the `restaurant` Collection Type and the `find` permission for the `category` Collection type.
 | |
| 
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| ::: tab @nuxtjs/strapi
 | |
| 
 | |
| ```js
 | |
| try {
 | |
|   await this.$strapi.create('restaurants', {
 | |
|     name: 'Dolemon Sushi',
 | |
|     description: 'Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious',
 | |
|     categories: [
 | |
|       3
 | |
|     ]
 | |
|   })
 | |
| } catch (error) {
 | |
|   this.error = error
 | |
| }
 | |
| ```
 | |
| :::
 | |
| 
 | |
| ::: tab axios
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| import axios from 'axios'
 | |
| 
 | |
| axios.post('http://localhost:1337/restaurants', {
 | |
|     name: 'Dolemon Sushi',
 | |
|     description: 'Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious',
 | |
|     categories: [
 | |
|       3
 | |
|     ]
 | |
|   })
 | |
|   .then(response => {
 | |
|     console.log(response);
 | |
|   })
 | |
| ```
 | |
| :::
 | |
| 
 | |
| ::: tab fetch
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| fetch('http://localhost:1337/restaurants', {
 | |
|    method: 'POST',
 | |
|    headers: {
 | |
|       'Content-Type': 'application/json'
 | |
|    },
 | |
|    body: JSON.stringify({
 | |
|      name: 'Dolemon Sushi',
 | |
|      description: 'Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious',
 | |
|      categories: [
 | |
|        3
 | |
|      ]
 | |
|    })
 | |
|  }).then(response => response.json())
 | |
|    .then(data => console.log(data));
 | |
| ```
 | |
| :::
 | |
| 
 | |
| *Response*
 | |
| 
 | |
| ```json
 | |
| {
 | |
|     "id": 2,
 | |
|     "name": "Dolemon Sushi",
 | |
|     "description": "Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious",
 | |
|     "created_by": null,
 | |
|     "updated_by": null,
 | |
|     "created_at": "2020-08-04T09:57:11.669Z",
 | |
|     "updated_at": "2020-08-04T09:57:11.669Z",
 | |
|     "categories": [{
 | |
|       "id": 3,
 | |
|       "name": "Japanese",
 | |
|       "created_by": 1,
 | |
|       "updated_by": 1,
 | |
|       "created_at": "2020-07-31T11:36:23.164Z",
 | |
|       "updated_at": "2020-07-31T11:36:23.172Z"
 | |
|     }]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ### Example
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| ::: tab @nuxtjs/strapi
 | |
| 
 | |
| `./pages/index.vue`
 | |
| 
 | |
| ```js
 | |
| <template>
 | |
| <div class="container">
 | |
|   <div v-if="error">
 | |
|     {{ error }}
 | |
|   </div>
 | |
| 
 | |
|   <form id="form" v-on:submit="handleSubmit" v-else>
 | |
|     <h3>Restaurants</h3>
 | |
|     <br>
 | |
| 
 | |
|     <label for="name">Name</label>
 | |
|     <input id="name" v-model="modifiedData.name" type="text" name="name">
 | |
| 
 | |
|     <label for="description">Description</label>
 | |
|     <input id="description" v-model="modifiedData.description" type="text" name="description">
 | |
|     <div>
 | |
|       <br />
 | |
|       <b>Select categories</b>
 | |
|       <br>
 | |
|       <div v-for="category in allCategories" :key="category.id">
 | |
|         <label>{{ category.name }}</label>
 | |
|         <input
 | |
|           type="checkbox"
 | |
|           :value="category.id"
 | |
|           v-model="modifiedData.categories"
 | |
|           name="categories"
 | |
|           :id="category.id"
 | |
|         />
 | |
|       </div>
 | |
|     </div>
 | |
|     <br>
 | |
| 
 | |
|     <input type="submit" value="Submit">
 | |
|   </form>
 | |
| 
 | |
| </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: 'App',
 | |
|   data() {
 | |
|     return {
 | |
|       allCategories: [],
 | |
|       modifiedData: {
 | |
|         name: '',
 | |
|         description: '',
 | |
|         categories: [],
 | |
|       },
 | |
|       error: null
 | |
|     }
 | |
|   },
 | |
|   async mounted() {
 | |
|     try {
 | |
|       this.allCategories = await this.$strapi.find('categories')
 | |
|     } catch (error) {
 | |
|       this.error = error
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     handleSubmit: async function(e) {
 | |
|       e.preventDefault();
 | |
| 
 | |
|       try {
 | |
|         await this.$strapi.create('restaurants', this.modifiedData)
 | |
|       } catch (error) {
 | |
|         this.error = error
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab axios
 | |
| 
 | |
| `./pages/index.vue`
 | |
| 
 | |
| ```js
 | |
| <template>
 | |
| <div id="app">
 | |
|   <div v-if="error">
 | |
|     {{ error }}
 | |
|   </div>
 | |
| 
 | |
|   <form id="form" v-on:submit="handleSubmit" v-else>
 | |
|     <label for="name">Name</label>
 | |
|     <input id="name" v-model="modifiedData.name" type="text" name="name">
 | |
| 
 | |
|     <label for="description">Description</label>
 | |
|     <input id="description" v-model="modifiedData.description" type="text" name="description">
 | |
| 
 | |
|     <div>
 | |
|       <br />
 | |
|       Select categories
 | |
|       <div v-for="category in allCategories" :key="category.id">
 | |
|         <label>{{ category.name }}</label>
 | |
|         <input
 | |
|           type="checkbox"
 | |
|           :value="category.id"
 | |
|           v-model="modifiedData.categories"
 | |
|           name="categories"
 | |
|           :id="category.id"
 | |
|         />
 | |
|       </div>
 | |
|     </div>
 | |
| 
 | |
|     <input type="submit" value="Submit">
 | |
|   </form>
 | |
| 
 | |
| </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import axios from 'axios'
 | |
| 
 | |
| export default {
 | |
|   name: 'App',
 | |
|   data() {
 | |
|     return {
 | |
|       allCategories: [],
 | |
|       modifiedData: {
 | |
|         name: '',
 | |
|         description: '',
 | |
|         categories: [],
 | |
|       },
 | |
|       error: null
 | |
|     }
 | |
|   },
 | |
|   async mounted() {
 | |
|     try {
 | |
|       const response = await axios.get('http://localhost:1337/categories')
 | |
|       this.allCategories = response.data;
 | |
|     } catch (error) {
 | |
|       this.error = error;
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     handleSubmit: async function(e) {
 | |
|       e.preventDefault();
 | |
| 
 | |
|       try {
 | |
|         const response = await axios.post('http://localhost:1337/restaurants', this.modifiedData)
 | |
|         console.log(response);
 | |
|       } catch(error) {
 | |
|         this.error = error;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab fetch
 | |
| 
 | |
| `./pages/index.vue`
 | |
| 
 | |
| ```js
 | |
| <template>
 | |
| <div id="app">
 | |
|   <div v-if="error">
 | |
|     {{ error }}
 | |
|   </div>
 | |
| 
 | |
|   <form id="form" v-on:submit="handleSubmit" v-else>
 | |
|     <h3>Restaurants</h3>
 | |
|     <br>
 | |
| 
 | |
|     <label for="name">Name</label>
 | |
|     <input id="name" v-model="modifiedData.name" type="text" name="name">
 | |
| 
 | |
|     <label for="description">Description</label>
 | |
|     <input id="description" v-model="modifiedData.description" type="text" name="description">
 | |
|     <div>
 | |
|       <br />
 | |
|       <b>Select categories</b>
 | |
|       <br>
 | |
|       <div v-for="category in allCategories" :key="category.id">
 | |
|         <label>{{ category.name }}</label>
 | |
|         <input
 | |
|           type="checkbox"
 | |
|           :value="category.id"
 | |
|           v-model="modifiedData.categories"
 | |
|           name="categories"
 | |
|           :id="category.id"
 | |
|         />
 | |
|       </div>
 | |
|     </div>
 | |
|     <br>
 | |
| 
 | |
|     <input type="submit" value="Submit">
 | |
|   </form>
 | |
| 
 | |
| </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: 'App',
 | |
|   data() {
 | |
|     return {
 | |
|       allCategories: [],
 | |
|       modifiedData: {
 | |
|         name: '',
 | |
|         description: '',
 | |
|         categories: [],
 | |
|       },
 | |
|       error: null,
 | |
|       headers: {'Content-Type': 'application/json'}
 | |
|     }
 | |
|   },
 | |
|   async mounted() {
 | |
|     try {
 | |
|       const allCategories = await fetch("http://localhost:1337/categories", {
 | |
|           method: 'GET',
 | |
|           headers: this.headers,
 | |
|         }).then(this.checkStatus)
 | |
|           .then(this.parseJSON);
 | |
|           this.allCategories = allCategories
 | |
|     } catch (error) {
 | |
|       this.error = error
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     parseJSON: function (resp) {
 | |
|       return (resp.json ? resp.json() : resp);
 | |
|     },
 | |
|     checkStatus: function (resp) {
 | |
|       if (resp.status >= 200 && resp.status < 300) {
 | |
|         return resp;
 | |
|       }
 | |
|       return this.parseJSON(resp).then((resp) => {
 | |
|         throw resp;
 | |
|       });
 | |
|     },
 | |
|     handleSubmit: async function(e) {
 | |
|       e.preventDefault();
 | |
| 
 | |
|       try {
 | |
|         const response = await fetch('http://localhost:1337/restaurants', {
 | |
|             method: 'POST',
 | |
|             headers: this.headers,
 | |
|             body: JSON.stringify(this.modifiedData)
 | |
|           }).then(this.checkStatus)
 | |
|             .then(this.parseJSON);
 | |
|             console.log(response);
 | |
|       } catch (error) {
 | |
|         this.error = error
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ### PUT Request your collection type
 | |
| 
 | |
| Execute a PUT request on the `restaurant` Collection Type in order to update the category of a restaurant.
 | |
| 
 | |
| Be sure that you activated the `put` permission for the `restaurant` Collection Type.
 | |
| 
 | |
| :::: tabs
 | |
| 
 | |
| We consider that the id of your restaurant is `2`
 | |
| and the id of your category is `3`
 | |
| 
 | |
| ::: tab @nuxtjs/strapi
 | |
| 
 | |
| ```js
 | |
| try {
 | |
|   await this.$strapi.update('restaurants', 2, {
 | |
|     categories: [
 | |
|       3
 | |
|     ]
 | |
|   })
 | |
| } catch (error) {
 | |
|   this.error = error
 | |
| }
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| 
 | |
| ::: tab axios
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| import axios from 'axios'
 | |
| 
 | |
| axios.put('http://localhost:1337/restaurants/2', {
 | |
|   categories: [
 | |
|     3
 | |
|   ]
 | |
| })
 | |
| .then(response => {
 | |
|   console.log(response);
 | |
| })
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| ::: tab fetch
 | |
| 
 | |
| *Request*
 | |
| 
 | |
| ```js
 | |
| fetch('http://localhost:1337/restaurants/2', {
 | |
|   method: "PUT",
 | |
|   headers: {
 | |
|      'Content-Type': 'application/json'
 | |
|   },
 | |
|   body: JSON.stringify({
 | |
|     categories: [
 | |
|       3
 | |
|     ]
 | |
|   })
 | |
| })
 | |
| .then(response => response.json())
 | |
| .then(data => {
 | |
|   console.log(data);
 | |
| })
 | |
| ```
 | |
| 
 | |
| :::
 | |
| 
 | |
| *Response*
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "id": 2,
 | |
|   "name": "Dolemon Sushi",
 | |
|   "description": "Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious",
 | |
|   "created_by": null,
 | |
|   "updated_by": null,
 | |
|   "created_at": "2020-08-04T10:21:30.219Z",
 | |
|   "updated_at": "2020-08-04T10:21:30.219Z",
 | |
|   "categories": [{
 | |
|     "id": 3,
 | |
|     "name": "Japanese",
 | |
|     "created_by": 1,
 | |
|     "updated_by": 1,
 | |
|     "created_at": "2020-08-04T10:24:26.901Z",
 | |
|     "updated_at": "2020-08-04T10:24:26.911Z"
 | |
|   }]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ::::
 | |
| 
 | |
| ## Conclusion
 | |
| 
 | |
| Here is how to request your Collection Types in Strapi using Nuxt.js. When you create a Collection Type or a Single Type you will have a certain number of REST API endpoints available to interact with.
 | |
| 
 | |
| We just used the GET, POST and PUT methods here but you can [get one entry](../content-api/api-endpoints.html#get-an-entry), [get how much entry you have](../content-api/api-endpoints.html#count-entries) and [delete](../content-api/api-endpoints.html#delete-an-entry) an entry too. Learn more about [API Endpoints](../content-api/api-endpoints.html#api-endpoints)
 |