# 建立後端程式碼(server)
1. 創建一個新的資料夾以存放專案
`mkdir fitness-website
cd fitness-website
`
2. 初始化 Node.js 專案並安裝 Express 和 Mongoose
```
npm init -y
npm install express mongoose
```
(我的vs code跑不出來才採用這種方式給您過目)
3. 在根目錄創建 server 資料夾和 server.js 檔案
```
mkdir server
cd server
touch server.js
```
## * server.js裡面的內容
```
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const app = express();
const port = 3001;
app.use(cors());
app.use(express.json());
mongoose.connect('mongodb://localhost/fitness_system', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const Trainer = mongoose.model('Trainer', {
name: String,
specialization: String,
bio: String,
});
const Member = mongoose.model('Member', {
name: String,
email: String,
phone: String,
});
const Course = mongoose.model('Course', {
title: String,
description: String,
trainer: { type: mongoose.Schema.Types.ObjectId, ref: 'Trainer' },
start_date: Date,
end_date: Date,
});
app.post('/trainers', async (req, res) => {
const { name, specialization, bio } = req.body;
const trainer = new Trainer({ name, specialization, bio });
await trainer.save();
res.json(trainer);
});
app.get('/trainers', async (req, res) => {
const trainers = await Trainer.find();
res.json(trainers);
});
app.post('/members', async (req, res) => {
const { name, email, phone } = req.body;
const member = new Member({ name, email, phone });
await member.save();
res.json(member);
});
app.get('/members', async (req, res) => {
const members = await Member.find();
res.json(members);
});
app.post('/courses', async (req, res) => {
const { title, description, trainerId, start_date, end_date } = req.body;
const course = new Course({ title, description, trainer: trainerId, start_date, end_date });
await course.save();
res.json(course);
});
app.get('/courses', async (req, res) => {
const courses = await Course.find().populate('trainer');
res.json(courses);
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
```
---
# 建立前端程式碼(client)
1. 在專案根目錄創建一個新的 React 專案
```
npx create-react-app client
cd client
```
2. 安裝 Axios(用於處理 HTTP 請求)
```
npm install axios
```
3.
在src資料夾中
創建一個名為components的資料夾
在components資料夾中
創建三個檔案
TrainerList.js
MemberList.js
CourseList.js
## * src/components/TrainerList.js裡面的內容
```
import React, { useState, useEffect } from 'react';
import axios from 'axios';
const TrainerList = () => {
const [trainers, setTrainers] = useState([]);
useEffect(() => {
axios.get('http://localhost:3001/trainers')
.then(response => setTrainers(response.data))
.catch(error => console.error('Error fetching trainers:', error));
}, []);
return (
<div>
<h2>教練列表</h2>
<ul>
{trainers.map(trainer => (
<li key={trainer._id}>{trainer.name} - {trainer.specialization}</li>
))}
</ul>
</div>
);
};
export default TrainerList;
```
---
## * src/components/MemberList.js裡面的內容
```
import React, { useState, useEffect } from 'react';
import axios from 'axios';
const MemberList = () => {
const [members, setMembers] = useState([]);
useEffect(() => {
axios.get('http://localhost:3001/members')
.then(response => setMembers(response.data))
.catch(error => console.error('Error fetching members:', error));
}, []);
return (
<div>
<h2>會員列表</h2>
<ul>
{members.map(member => (
<li key={member._id}>{member.name} - {member.email}</li>
))}
</ul>
</div>
);
};
export default MemberList;
```
---
## * src/components/CourseList.js裡面的內容
```
import React, { useState, useEffect } from 'react';
import axios from 'axios';
const CourseList = () => {
const [courses, setCourses] = useState([]);
useEffect(() => {
axios.get('http://localhost:3001/courses')
.then(response => setCourses(response.data))
.catch(error => console.error('Error fetching courses:', error));
}, []);
return (
<div>
<h2>課程列表</h2>
<ul>
{courses.map(course => (
<li key={course._id}>{course.title} - {course.trainer.name} - {course.start_date} to {course.end_date}</li>
))}
</ul>
</div>
);
};
export default CourseList;
```
---
4. 在src 資料夾中,創建一個名為pages的資料夾。在 pages 資料夾中,創建一個檔案Home.js
## * src/pages/Home.js
```
import React from 'react';
import TrainerList from '../components/TrainerList';
import MemberList from '../components/MemberList';
import CourseList from '../components/CourseList';
const Home = () => {
return (
<div>
<h1>健身服務網站</h1>
<TrainerList />
<MemberList />
<CourseList />
</div>
);
};
export default Home;
```
5. 在src資料夾中,打開App.js檔案,刪除現有內容,並將以下程式碼複製到該檔案中
## * src/App.js裡面的內容
```
import React from 'react';
import Home from './pages/Home';
const App = () => {
return (
<div>
<Home />
</div>
);
};
export default App;
```
---
# 啟動應用程式
1. 在fitness-website專案根目錄中,先啟動後端server
```
cd server
node server.js
```
2. 在另一個終端或命令提示字元中,啟動前端應用
```
cd client
npm start
```
應用程式將在瀏覽器中打開