{"id":4508,"date":"2026-02-19T09:44:56","date_gmt":"2026-02-19T00:44:56","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=4508"},"modified":"2026-02-19T10:52:21","modified_gmt":"2026-02-19T01:52:21","slug":"vitereactaxios-ex8","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/02\/19\/vitereactaxios-ex8\/","title":{"rendered":"[Vite+React]axios,cors-GET,POST,PATCH,PUT(MacOS)"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb GET,POST,PATCH,PUT\uc744 axios\ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uc5ec \uad6c\ud604\ud55c \ucf54\ub4dc\uc785\ub2c8\ub2e4.<br>This is the code that implements GET, POST, PATCH, and PUT using the axios module.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131\uacfc \ubaa8\ub4c8 \uc124\uce58\ub294 \uc774\uc804 \ud3ec\uc2a4\ud2b8\ub97c \ucc38\uc870\ud558\uc138\uc694<br>Please refer to the previous post for project creation and module installation.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-freelifemakers-org wp-block-embed-freelifemakers-org\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"eXl3ovSFGm\"><a href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/02\/18\/vitereact-example7\/\">[Vite+React]GET,POST,PATCH,PUT(MacOS)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;[Vite+React]GET,POST,PATCH,PUT(MacOS)&#8221; &#8212; freelifemakers.org\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/02\/18\/vitereact-example7\/embed\/#?secret=V9MUdqppdX#?secret=eXl3ovSFGm\" data-secret=\"eXl3ovSFGm\" width=\"560\" height=\"315\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ucc28\ub2e8\ub418\ub294 \uc624\ub958\ub97c \ubc29\uc9c0\ud558\uc9c0 \uc704\ud574\uc11c cors\ubaa8\ub4c8\ub3c4 \uc124\uce58\ud569\ub2c8\ub2e4.<br>Also install the cors module to avoid browser blocking errors.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb CORS <\/p>\n\n\n\n<p>\u2714\ufe0f \ubaa8\ub4c8\uc124\uce58 \/ Module installation<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>% npm install cors<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0fCORS\ub780 <strong>Cross-Origin Resource Sharing<\/strong>\uc758 \uc904\uc784\ub9d0\uc785\ub2c8\ub2e4.<br>CORS stands for Cross-Origin Resource Sharing.<\/p>\n\n\n\n<p>\u2714\ufe0f \ube0c\ub77c\uc6b0\uc800\ub294 \ubcf4\uc548\uc0c1 \uc774\uc720\ub85c \ub2e4\ub978 \ucd9c\ucc98(\ub3c4\uba54\uc778, \ud3ec\ud2b8, \ud504\ub85c\ud1a0\ucf5c)\uac00 \ub2e4\ub978 \uc11c\ubc84\uc5d0 \uc694\uccad\ud558\ub294 \uac83\uc744 \uae30\ubcf8\uc801\uc73c\ub85c \ucc28\ub2e8\ud569\ub2c8\ub2e4.<br>For security reasons, browsers block requests from other origins (domains, ports, protocols) to other servers by default.<\/p>\n\n\n\n<p>\u2714\ufe0f \uc608\ub97c \ub4e4\uc5b4 \ud504\ub860\ud2b8\uc5d4\ub4dc: <code>http:\/\/localhost:3000<\/code> ,\ubc31\uc5d4\ub4dc: <code>http:\/\/localhost:5000<\/code> \uc774 \uacbd\uc6b0 \ud3ec\ud2b8\uac00 \ub2e4\ub974\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub978 \ucd9c\ucc98\ub85c \uc778\uc2dd\ub418\uc5b4 \uc694\uccad\uc774 \ucc28\ub2e8\ub429\ub2c8\ub2e4.<br>For example, frontend: http:\/\/localhost:3000, backend: http:\/\/localhost:5000 In this case, since the ports are different, the requests are recognized as different origins and blocked.<\/p>\n\n\n\n<p>\u2714\ufe0f \uadf8\ub798\uc11c \ube0c\ub77c\uc6b0\uc800\uc758 \uc8fc\uc18c\uc640 \ubc31\uc5d4\ub4dc \uc11c\ubc84\uc758 \uc8fc\uc18c\uac00 \ub2e4\ub974\uba74 \ubc31\uc5d4\ub4dc \uc11c\ubc84\uc5d0\uc11c \ud5c8\uc6a9\uc744 \ud574\uc918\uc57c\ud569\ub2c8\ub2e4.<br>So, if the browser address and the backend server address are different, you need to allow it on the backend server.<\/p>\n\n\n\n<p>\u2714\ufe0f \ucc28\ub2e8\uc740 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ud558\uc9c0\ub9cc \ubc31\uc5d4\ub4dc \uc11c\ubc84\uc5d0 cors\ubaa8\ub4c8\uc744 \uc124\uce58\ud55c\uacbd\uc6b0 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc694\uccad\uc2dc \uc11c\ubc84\uc5d0\uc11c \ud5e4\ub354\uc815\ubcf4\ub97c \ube0c\ub77c\uc6b0\uc800\ub85c \ub9ac\ud134\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uac00 \ud5c8\uc6a9\ud569\ub2c8\ub2e4.<br>Blocking is done in the browser, but if the CORS module is installed on the backend server, the browser allows it when the server returns header information to the browser when making a request.<\/p>\n\n\n\n<p>\u2714\ufe0f \uc544\ub798\uc758 App.tsx\uc5d0\uc11c\ub294  \ub2e4\uc74c\ucc98\ub7fc cors\ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<br>In the App.tsx below, we are using the cors module as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const cors = require(\"cors\");\napp.use(cors());<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb axios<\/p>\n\n\n\n<p>\u2714\ufe0f \ubaa8\ub4c8\uc124\uce58 \/ Module installation<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install axios<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f axios\ub294 HTTP \uc694\uccad\uc744 \uc27d\uac8c \ubcf4\ub0b4\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4.<br>Axios is a library that makes it easy to send HTTP requests.<\/p>\n\n\n\n<p>\u2714\ufe0f promise\uae30\ubc18\uc774\uba70  .then() \/ .catch() \ub610\ub294 async\/await \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4.<br>It is promise-based and can use .then() \/ .catch() or async\/await.<\/p>\n\n\n\n<p>\u2714\ufe0f JSON\uc744 \uc790\ub3d9 \ubcc0\ud658\ud569\ub2c8\ub2e4.<br>Automatically converts JSON.<\/p>\n\n\n\n<p>\u2714\ufe0f \uc694\uccad\uc751\ub2f5\uac00\ub85c\ucc44\uae30\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>You can intercept request responses.<\/p>\n\n\n\n<p>&#8212; \uc5ec\uae30\uc11c\ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc73c\uba70 refreshToken,accessToken\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc778\uc99d \ud560 \uacbd\uc6b0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br>It is not used here, but is used when authenticating using refreshToken and accessToken.<\/p>\n\n\n\n<p>&#8212; \uc544\ub798\uc758 \ud615\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br>Use the format below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>axios.interceptors.request.use(config => {\n  config.headers.Authorization = \"Bearer token\";\n  return config;\n});<\/code><\/pre>\n\n\n\n<p>\u2714 timeout \uc124\uc815\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<br>Timeout setting is possible.<\/p>\n\n\n\n<p>&#8212; \uc5ec\uae30\uc11c\ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<br>Not used here.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>axios.get(\"\/api\", { timeout: 5000 });<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \uc544\ub798\uc758 App.tsx(\ud504\ub860\ud2b8\uc5d4\ub4dc) \ucf54\ub4dc\uc5d0 axios\ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud574\uc11c vite.config.ts\ub300\uc2e0\uc5d0 \ub2e4\uc74c \uc124\uc815\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<br>In the server.js (frontend) code below, use the axios module and use the following configuration instead of vite.config.ts.<\/p>\n\n\n\n<p>\u2714\ufe0f \uc544\ub798\uc758  App.tsx\uc5d0\uc11c \ub3d9\uc801 \ub77c\uc6b0\ud130 \uc0ac\uc6a9\uc744 \uc704\ud574\uc11c \uc124\uc815\ud569\ub2c8\ub2e4.(vite.config.ts\uc640 \ub3d9\uc77c\ud55c \uc5ed\ud560)<br>Configure the App.tsx below to use a dynamic router. (Same role as vite.config.ts)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  const api = axios.create({\n    baseURL: \"http:\/\/localhost:3000\",\n  });<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ud504\ub860\ud2b8\uc5d4\ub4dc \/ Front-end<\/p>\n\n\n\n<p>\u2714\ufe0f App.tsx<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import React, { useState } from \"react\";\nimport axios from \"axios\";\n\nfunction UserComponent() {\n  const &#91;userId, setUserId] = useState(\"1\");\n  const &#91;userData, setUserData] = useState(null);\n  const &#91;log, setLog] = useState(\"\");\n\n  \/\/ vite.config.ts \ub300\uc2e0 \uc124\uc815 \ud560 \uc218 \uc788\uc74c.\n  \/\/ \ub300\uc2e0\uc5d0 cors\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ub2c8 \ubc18\ub4dc\uc2dc \uc11c\ubc84\ucabd\uc5d0 cors\ubaa8\ub4c8 \uc124\uce58 \ud560 \uac83\n  \/\/ You can set it instead of vite.config.ts. \n  \/\/ Instead, you must install the cors module on the server side to avoid a cors error.\n  const api = axios.create({\n    baseURL: \"http:\/\/localhost:3000\",\n  });\n\n  const handleResponse = (res) =&gt; {\n    setUserData(res.data || null);\n    setLog(JSON.stringify(res.data, null, 2));\n  };\n\n  const handleError = (err) =&gt; {\n    const data = err.response?.data || { message: \"Error occurred\" };\n    setUserData(null);\n    setLog(JSON.stringify(data, null, 2));\n  };\n\n  const getUser = () =&gt;\n    api.get(`\/users\/${userId}`).then(handleResponse).catch(handleError);\n\n  const createUser = () =&gt;\n    api\n      .post(\"\/users\", {\n        name: \"NewUser\",\n        age: 30,\n        nickname: \"SilverHand\",\n      })\n      .then(handleResponse)\n      .catch(handleError);\n\n  const patchUser = () =&gt;\n    api\n      .patch(`\/users\/${userId}`, {\n        nickname: \"Johnny\",\n      })\n      .then(handleResponse)\n      .catch(handleError);\n\n  const putUser = () =&gt;\n    api\n      .put(`\/users\/${userId}`, {\n        name: \"John\",\n        age: 25,\n      })\n      .then(handleResponse)\n      .catch(handleError);\n\n  const deleteUser = () =&gt;\n    api\n      .delete(`\/users\/${userId}`)\n      .then((res) =&gt; {\n        setUserData(null);\n        setLog(res.data.message);\n      })\n      .catch(handleError);\n\n  return (\n    &lt;div style={{ padding: \"20px\", fontFamily: \"sans-serif\" }}&gt;\n      &lt;h1&gt;HTTP Methods Playground&lt;\/h1&gt;\n\n      &lt;input\n        value={userId}\n        onChange={(e) =&gt; setUserId(e.target.value)}\n        placeholder=\"User ID\"\n      \/&gt;\n\n      &lt;div style={{ margin: \"10px 0\", display: \"flex\", gap: \"10px\" }}&gt;\n        &lt;button onClick={getUser}&gt;GET&lt;\/button&gt;\n        &lt;button onClick={createUser}&gt;POST&lt;\/button&gt;\n        &lt;button onClick={patchUser}&gt;PATCH&lt;\/button&gt;\n        &lt;button onClick={putUser}&gt;PUT&lt;\/button&gt;\n        &lt;button onClick={deleteUser}&gt;DELETE&lt;\/button&gt;\n      &lt;\/div&gt;\n\n      &lt;div\n        style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: \"20px\" }}\n      &gt;\n        &lt;section&gt;\n          &lt;h3&gt;\ud604\uc7ac \ub370\uc774\ud130 \uc0c1\uc138\/Current data details&lt;\/h3&gt;\n          {userData ? (\n            &lt;div style={{ border: \"1px solid blue\", padding: \"10px\" }}&gt;\n              &lt;p&gt;ID: {userData.id}&lt;\/p&gt;\n              &lt;p&gt;\uc774\ub984\/Name: {userData.name || \"\uc5c6\uc74c\"}&lt;\/p&gt;\n              &lt;p&gt;\ub098\uc774\/Age: {userData.age || \"\uc5c6\uc74c\"}&lt;\/p&gt;\n              &lt;p&gt;\ub2c9\ub124\uc784\/NickName: {userData.nickname || \"\uc5c6\uc74c\"}&lt;\/p&gt;\n            &lt;\/div&gt;\n          ) : (\n            &lt;p&gt;\uc870\ud68c\ub41c \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.\/Detailed search of current data.&lt;\/p&gt;\n          )}\n        &lt;\/section&gt;\n\n        &lt;section&gt;\n          &lt;h3&gt;\uc11c\ubc84\uc751\ub2f5\/Server response&lt;\/h3&gt;\n          &lt;pre style={{ background: \"#f4f4f4\", padding: \"10px\" }}&gt;{log}&lt;\/pre&gt;\n        &lt;\/section&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  );\n}\n\nexport default UserComponent;\n<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ubc31\uc5d4\ub4dc \/ Back-end<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const express = require(\"express\");\nconst app = express();\nconst cors = require(\"cors\");\nconst PORT = 3000;\n\n\/\/ \uc11c\ubc84\uc640 \uc694\uccad\ud558\ub294 \uacf3\uc758 \ud3ec\ud2b8\uac00 \ub2e4\ub974\uba74 cors\uc5d0\ub7ec \ubc1c\uc0dd\ud568.\n\/\/ \ud3ec\ud2b8\uac00 \ub2e4\ub974\uba74 \ube0c\ub77c\uc6b0\uc800\ub294 \ub2e4\ub978 \ucd9c\ucc98(origin) \ub85c \ud310\ub2e8\ud568.\n\/\/ \ube0c\ub77c\uc6b0\uc800 \ubcf4\uc548\uc815\ucc45\uc0c1 \ud504\ub85c\ud1a0\ucf5c,\ub3c4\uba54\uc778,\ud3ec\ud2b8\ubc88\ud638\uc911 \ud558\ub098\ub77c\ub3c4 \ud2c0\ub9ac\uba74 \ub9c9\uc74c.\n\/\/ If the port of the server and the requesting party are different, a CORS error occurs.\n\/\/ If the ports are different, the browser considers them to be from different origins.\n\/\/ According to browser security policy, if any of the protocol, domain, or port number is different, the request is blocked.\napp.use(cors());\napp.use(express.json());\n\n\/\/ \uac00\uc0c1\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \/ Virtual Database\nlet users = &#91;{ id: \"1\", name: \"V\", age: 20, nickname: \"Cyberpunk2077\" }];\n\n\/\/ GET: \ud2b9\uc815 \uc720\uc800 \uc870\ud68c \/ Specific user inquiry\napp.get(\"\/users\/:id\", (req, res) =&gt; {\n  const user = users.find((u) =&gt; u.id === req.params.id);\n  user\n    ? res.json(user)\n    : res.status(404).json({ message: \"\uc720\uc800 \uc5c6\uc74c\/No user\" });\n});\n\n\/\/ POST: \uc0c8\ub85c\uc6b4 \uc720\uc800 \uc0dd\uc131 \/ Create new user\napp.post(\"\/users\", (req, res) =&gt; {\n  const newUser = { id: String(users.length + 1), ...req.body };\n  users.push(newUser);\n  res.status(201).json(newUser);\n});\n\n\/\/ PATCH: \ub370\uc774\ud130\uc758 '\uc77c\ubd80'\ub9cc \uc218\uc815 (\uae30\uc874 \ub370\uc774\ud130 \uc720\uc9c0)\n\/\/ Modify only 'part' of the data (keep existing data)\napp.patch(\"\/users\/:id\", (req, res) =&gt; {\n  const index = users.findIndex((u) =&gt; u.id === req.params.id);\n  if (index !== -1) {\n    \/\/ \uae30\uc874 \uac12 + \ubc14\ub010 \uac12 \ud569\uce58\uae30 \/ Merge existing value + changed value\n    users&#91;index] = { ...users&#91;index], ...req.body };\n    res.json(users&#91;index]);\n  } else {\n    res.status(404).json({ message: \"\uc720\uc800 \uc5c6\uc74c\/No user\" });\n  }\n});\n\n\/\/ PUT: \ub370\uc774\ud130 '\uc804\uccb4'\ub97c \uad50\uccb4 (\ubcf4\ub0b4\uc9c0 \uc54a\uc740 \ud544\ub4dc\ub294 \uc0ac\ub77c\uc9d0)\n\/\/ Replace 'all' data (unsent fields disappear)\napp.put(\"\/users\/:id\", (req, res) =&gt; {\n  const index = users.findIndex((u) =&gt; u.id === req.params.id);\n  if (index !== -1) {\n    \/\/ \uae30\uc874 \ub0b4\uc6a9 \ubb34\uc2dc\ud558\uace0 \ub36e\uc5b4\uc4f0\uae30 \/ Ignore existing content and overwrite\n    users&#91;index] = { id: req.params.id, ...req.body };\n    res.json(users&#91;index]);\n  } else {\n    res.status(404).json({ message: \"\uc720\uc800 \uc5c6\uc74c\/No user\" });\n  }\n});\n\n\/\/ DELETE: \ub370\uc774\ud130 \uc0ad\uc81c \/ data deletion\napp.delete(\"\/users\/:id\", (req, res) =&gt; {\n  users = users.filter((u) =&gt; u.id !== req.params.id);\n  res.json({ message: `User ${req.params.id} \uc0ad\uc81c \uc644\ub8cc \/ Deletion complete` });\n});\n\napp.listen(PORT, () =&gt; console.log(`Server: http:\/\/localhost:${PORT}`));\n<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc2a4\ud06c\ub9b0 \uc0f7 \/ ScreenShot<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"855\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios-1024x855.png\" alt=\"\" class=\"wp-image-4554\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios-1024x855.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios-300x251.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios-768x641.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios-400x334.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios-800x668.png 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/02\/cors-axios.png 1358w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb GET,POST,PATCH,PUT\uc744 axios\ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud558\uc5ec \uad6c\ud604\ud55c \ucf54\ub4dc\uc785\ub2c8\ub2e4.This is the code that implements GET, POST, PATCH, and PUT using the axios module. \ud83d\udc49\ud83c\udffb \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131\uacfc \ubaa8\ub4c8 \uc124\uce58\ub294 \uc774\uc804 \ud3ec\uc2a4\ud2b8\ub97c \ucc38\uc870\ud558\uc138\uc694Please refer to the previous post for project creation and module installation. \ud83d\udc49\ud83c\udffb \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ucc28\ub2e8\ub418\ub294 \uc624\ub958\ub97c \ubc29\uc9c0\ud558\uc9c0 \uc704\ud574\uc11c cors\ubaa8\ub4c8\ub3c4 \uc124\uce58\ud569\ub2c8\ub2e4.Also install the cors module to avoid browser blocking [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,1,7],"tags":[],"class_list":["post-4508","post","type-post","status-publish","format-standard","hentry","category-react","category-uncategorized","category-website","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/4508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=4508"}],"version-history":[{"count":44,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/4508\/revisions"}],"predecessor-version":[{"id":4556,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/4508\/revisions\/4556"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=4508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=4508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=4508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}