iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

中年大叔(40+)前端自學筆記系列 第 24

DAY24 - 從cms的資料庫撈資料到前端 3

  • 分享至 

  • xImage
  •  

前言:

昨天把Review頁面完成後,接下來要做單獨的頁面API資料串接
現在點選個別的遊戲頁面連結是會跳出錯誤的,今天就完成這個部分

圖片

先在測試程式裡實作 scripts\strapi-request.mjs

import { writeFileSync } from "node:fs";
import qs from "qs";

const url =
    "http://localhost:1337/api/reviews/8" +
    "?" +
    qs.stringify(
        {
            filters: { slug: { $eq: "heads-2018" } },
            fields: ["slug", "title", "subtitle", "publishedAt"],
            populate: { image: { fields: ["url"] } },
            pagination: { pageSize: 1, withCount: false },
        },
        { encodeValuesOnly: true }
    );
console.log("url = ", url);

const response = await fetch(url);
// console.log("response =", response);

const body = await response.json();

// console.log("body =", JSON.stringify(body, null, 2));

const formatted = JSON.stringify(body, null, 2);

const file = "scripts/strapi-response.json";
writeFileSync(file, formatted, "utf-8");

得到的資料格式如下: (scripts/strapi-response.json)

{
  "data": {
    "id": 8,
    "attributes": {
      "slug": "hades-2018",
      "title": "Hades",
      "subtitle": "A Rogue-Like Gem that Ascends to Greatness",
      "publishedAt": "2023-05-28T11:00:00.000Z",
      "image": {
        "data": {
          "id": 8,
          "attributes": {
            "url": "/uploads/hades_2018_bff8e28a82.jpg"
          }
        }
      }
    }
  },
  "meta": {}
}

上面做完,就可以從CMS的資料庫中透過API把需要資料撈出來
接下來把 上面的測試程式直接複製到專案的城市碼理

lib\reviews.js

// 導入 CMS 後 改寫的函式 getReview
export async function getReview(slug) {
    const url =
        "http://localhost:1337/api/reviews/" +
        "?" +
        qs.stringify(
            {
                filters: { slug: { $eq: slug } },
                fields: ["slug", "title", "subtitle", "publishedAt", "body"],
                populate: { image: { fields: ["url"] } },
                pagination: { pageSize: 1, withCount: false },
            },
            { encodeValuesOnly: true }
        );
    console.log("getReview: ", url);
    const response = await fetch(url);
    const { data } = await response.json();
    const { attributes } = data[0];
    return {
        slug: attributes.slug,
        title: attributes.title,
        date: attributes.publishedAt.slice(0, "yyy-mm-dd".length),
        image: CMD_URL + attributes.image.data.attributes.url,
        body: marked(attributes.body, { headIds: false, mangle: false }),
    };
}

圖片


上一篇
DAY23 - 從cms的資料庫撈資料到前端 2
下一篇
DAY25 - 從cms的資料庫撈資料到前端 4 (end)
系列文
中年大叔(40+)前端自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言