❤Node-购物车模块
【摘要】 ❤Node-购物车模块
❤Node-购物车模块
1、购物车表的创建
接下来我们新建一个商品表 cartitems,实现商品模块部分的功能
创建一个对应的SQL数据表,该表使用InnoDB引擎,字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci
CREATE TABLE CartItems (
cartitem_id INT AUTO_INCREMENT PRIMARY KEY, -- 购物车项ID,主键,自增
user_id INT, -- 用户ID(外键,关联sys_user表)
product_id INT, -- 商品ID(外键,关联Products表)
quantity INT DEFAULT 1, -- 商品数量
price DECIMAL(10, 2), -- 商品价格(记录当前加入购物车时的价格)
added_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 加入购物车的时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 最后更新时间
is_active BOOLEAN DEFAULT TRUE, -- 是否仍在购物车中(可以用来处理购物车清空等情况)
-- 外键约束
FOREIGN KEY (user_id) REFERENCES sys_user(user_id), -- 外键:用户ID关联sys_user表
FOREIGN KEY (product_id) REFERENCES products(product_id) -- 外键:商品ID关联Products表
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
👉 去掉外键约束
CREATE TABLE CartItems (
cartitem_id INT AUTO_INCREMENT PRIMARY KEY, -- 购物车项ID,主键,自增
user_id INT, -- 用户ID
product_id INT, -- 商品ID
quantity INT DEFAULT 1, -- 商品数量
price DECIMAL(10, 2), -- 商品价格(记录当前加入购物车时的价格)
added_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 加入购物车的时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 最后更新时间
is_active BOOLEAN DEFAULT TRUE -- 是否仍在购物车中(可以用来处理购物车清空等情况)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2、搜索接口
SELECT * FROM CartItems
接下来为商品模块写一个搜索接口,进行模糊搜索
👉 cartitemsRoutes.js
引入封装方法
const express = require('express');
const router = express.Router();
const connectionPool = require('../db'); // 引入数据库连接池模块
const {addCondition,addDateRangeCondition,addPagination,convertKeysToSnakeCase} = require('../methods.js'); // 引入封装方法
const {listApi,getApi,addApi,updateApi,delApi,changeStatusApi} = require('../apimethods.js');
查询列表
// 查询列表
router.get('/',(req, res) => {
let querySql = `SELECT * FROM CartItems `; // 查询数据库列表
let querysqltotal = `SELECT COUNT(*) AS total FROM CartItems`; // 查询数据库总数
// 查询数据库并返回数据
const { user_id, product_id, quantity, price, is_active,page_num, page_size } = convertKeysToSnakeCase(req.query);
listApi(querySql,querysqltotal,req,res,{ user_id, product_id, quantity, price, is_active,page_num, page_size});
});
验证一下我们的查询接口 ,查询没问题
3、增加接口
添加功能
先来试试我们的数据库插入语言,看是否正确
INSERT INTO CartItems (user_id, product_id, quantity, price, is_active)
VALUES (1, 101, 2, 199.99, TRUE);
查看数据库部分,数据库之中的数据已经进行了相应的更改,接下来我们将数据库语言放入我们的语句之中
// 新增 POST
// 新增 POST
router.post('/', (req, res) => {
const insertSql = 'INSERT INTO CartItems SET ?'; // 准备 SQL 插入语句
const {quantity, price, is_active} = convertKeysToSnakeCase(req.body);
const postData = {quantity, price};
addApi(insertSql,res,postData);
});
尝试一下我们的新增接口
// 新增数据
{
"price": "1",
"quantity": "1"
}
增加功能ok,并且能正确返回我们想要的东西
4、详情接口
详情,通过id然后查到对应的内容
接下来我们简单写一个详情
// 获取详情 3
router.get('/:id', (req, res) => {
const { id } = req.params;
const values = [id];
let querySql = 'SELECT * FROM CartItems WHERE cartitem_id = ?';
getApi(querySql,values,res);
});
简单测试一下,详情接口没问题,采用ID的方式进行获取的
5、修改接口
接下来我们完善一下我们的修改接口:
// 更新sql语句
UPDATE CartItems
SET quantity = 1, price = 179.99, is_active = FALSE
WHERE user_id = 1 AND product_id = 101;
写一下修改接口的更改
// 更新接口 PUT请求处理程序
router.put('/', (req, res) => {
const { user_id, product_id, quantity, price, is_active,cartitem_id} = convertKeysToSnakeCase(req.body);
const updatevalues = {user_id, product_id, quantity, price, is_active};
let updateSql='UPDATE CartItems SET ? WHERE cartitem_id = ?';
updateApi(updateSql,[updatevalues, cartitem_id],res);
});
测试一下修改接口,修改接口没问题
6、删除接口
删除部分我们写一个API
// 删除数据 DELETE请求处理程序
// 删除数据 DELETE请求处理程序
router.delete('/:id', (req, res) => {
const id = req.params.id;
const delsql = "DELETE FROM CartItems WHERE cartitem_id = ?";
delApi(delsql,[id],res);
});
点击删除按钮测试一下我们的接口,删除功能ok!
7、更改状态
接下来我们写一个更改状态部分的接口,我们写一个API
//禁用和使用,用于更改状态
router.put('/status/:id', (req, res) => {
const id = parseInt(req.params.id);
const newState = req.body.isActive ?req.body.isActive :0;
const query = 'UPDATE CartItems SET is_active = ? WHERE cartitem_id = ?';
changeStatusApi(query,[newState, id],res);
});
测试一下我们的状态接口,更改状态功能ok!
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)