- 前端 (React.js)tzxl8023.com
商品列表组件 (ProductList.jsx)
jsx
import React, { useState, useEffect } from ‘react’;
function ProductList({ fetchProducts }) {
const [products, setProducts] = useState([]);
useEffect(() => {
fetchProducts().then(products => setProducts(products));
}, [fetchProducts]);
return (
<div>
<h1>Product List</h1>
<ul>
{products.map(product => (
<li key={product.id}>{product.name} - ${product.price}</li>
))}
</ul>
</div>
);
}
export default ProductList;
注意:这里的fetchProducts是一个prop,应该由父组件提供,它返回一个promise,该promise解析为商品数组。
- 后端 (Node.js + Express)
商品路由 (routes/products.js)
javascript
const express = require(‘express’);
const router = express.Router();
const db = require(‘…/db’); // 假设的数据库连接模块
router.get(‘/’, async (req, res) => {
try {
const products = await db.getProducts(); // 假设db模块有getProducts方法
res.json(products);
} catch (error) {
res.status(500).send(‘Error fetching products’);
}
});
module.exports = router;
服务器设置 (app.js)
javascript
const express = require(‘express’);
const productRoutes = require(‘./routes/products’);
const app = express();
const PORT = process.env.PORT || 3001;
app.use(‘/api’, productRoutes);
app.listen(PORT, () => {
console.log(Server is running on port ${PORT}.
);
});
3. 数据库 (MySQL)
数据库连接和查询(这里仅示意,实际使用库如mysql2或sequelize)
javascript
// 假设的db.js文件
// 注意:这里只是示意,实际项目中会使用更完善的数据库连接库
const mysql = require(‘mysql2/promise’);
const connection = await mysql.createConnection({
host: ‘localhost’,
user: ‘yourUsername’,
database: ‘yourDatabase’,
password: ‘yourPassword’
});
async function getProducts() {
const [rows] = await connection.execute(‘SELECT * FROM Products’);
return rows;
}
module.exports = { getProducts };
4. 整合
在实际应用中,你需要将前端、后端和数据库连接起来。前端会发送HTTP请求到后端,后端处理这些请求并与数据库交互,然后将结果返回给前端。
前端发起请求的例子 (Axios)
在React组件中,你可能会使用Axios来发送请求到/api/products端点。
jsx
import axios from ‘axios’;
function App() {
const [products, setProducts] = useState([]);
useEffect(() => {
axios.get('/api/products')
.then(response => setProducts(response.data))
.catch(error => console.error('Error fetching products:', error));
}, []);
return (
<div>
<ProductList products={products} />
</div>
);
}
注意:这里ProductList组件已经修改,以便直接从父组件App接收products作为prop,而不是通过fetchProducts函数。
完整项目
要构建一个完整的购物商城,你还需要添加更多功能,如用户认证、购物车管理、订单处理、支付集成、搜索和筛选等。每个功能都可能需要前端、后端和数据库之间的紧密协作。
由于篇幅和复杂性的限制,这里只能提供一个非常基础的框架。在实际开发中,你需要根据具体需求进行详细的设计和实现。