上一篇提到如何從前端將資料傳給後端資料庫,所以這篇就來處理要怎麼從後端存取文章資料到前端~
GET method在 server/index.js 新增使用 GET 的 api,內容大致與之前的 POST 相同,除了 HTTP 請求改為 get 之外,也用到了 Mongoose 的 query 方法 → Model.find() ,它會回傳所有 Post 資料庫中的文件
app.get('/api/v1/posts', async (req, res) => {
    try {
        const post = await Post.find();
        res.status(200).json({
            status: 'success',
            data: {
                data: post,
            },
        });
    } catch (err) {
        console.log(err);
        res.json({
            status: 'error',
        });
    }
});
在 src/api/index.js 中新增 getAllPost 方法,並使用 axios.get() 來串接 api,並回傳結果的 data 值 (res.data)
export const getAllPost = async () => {
    try {
        const res = await axios.get(`${baseUrl}api/v1/posts`);
        return res.data;
    } catch (err) {
        console.log(err.response);
        alert('讀取文章失敗 (|||゚д゚)');
    }
};
接著在 src/pages/Home.js 中引入 useEffect 及 getAllPost,並在第一次渲染頁面時呼叫 getAllPost api :
useEffect 中不可使用 async/await ,所以將 getAllPost 包成另一個函數 → fetchAllPost()
useState 建立新的狀態變數 posts ,用來儲存 api 回傳的資料import React, { useState, useEffect } from 'react';
import { getAllPost } from '../api';
const [posts, setPosts] = useState([]);
useEffect(() => {
    fetchAllPost();
}, []);
const fetchAllPost = async () => {
    const res = await getAllPost();
    setPosts(res.data.data);
};
然後將狀態變數 posts 以參數 data 傳給 <Post /> 元件
<Post data={posts} />
(目前 Home.js 的程式碼)

<Post /> 元件原本在 src/components/Post.js 中,我們使用 Redux 的 useSelector 來讀取網站的全域變數,而現在我們現在有了後端資料庫,也就不用再從全域變數讀取資料了,那該怎麼使用從 Home.js 傳進來的 data 參數呢?
在這個例子中,<Post /> 是子元件,接受一個「props」(屬性 properties)物件並回傳一個 React element,子元件可以透過 props 來取得父元件 <Home /> 傳入的 data:
// 方法一
export default function Post(props) {
		// const data = props.data;
    const { data } = props;
}
// 方法二
export default function Post({data}) {
		
}
目前程式碼
備註: <Link /> 的 to 將 id → _id 、el.created_at → el.createdAt (依照後端定義的名稱)

這樣就可以在首頁顯示從後端 api 取得的所有文章啦~
