From caa6d6ea12dc0f80b5a9fbf70fffa44be012f6ad Mon Sep 17 00:00:00 2001 From: P-Jhao <2212688637@qq.com> Date: Mon, 28 Apr 2025 00:02:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eaddress=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 51 ++++++++++++++++++++------------------ dao/addressDao.js | 42 +++++++++++++++++++++++++++++++ dao/model/addressModel.js | 46 ++++++++++++++++++++++++++++++++++ routes/address.js | 32 ++++++++++++++++++++++++ services/addressService.js | 29 ++++++++++++++++++++++ 5 files changed, 176 insertions(+), 24 deletions(-) create mode 100644 dao/addressDao.js create mode 100644 dao/model/addressModel.js create mode 100644 routes/address.js create mode 100644 services/addressService.js diff --git a/app.js b/app.js index 0534bc9..0175000 100644 --- a/app.js +++ b/app.js @@ -1,42 +1,46 @@ -var createError = require('http-errors'); -var express = require('express'); -var path = require('path'); -var cookieParser = require('cookie-parser'); -var logger = require('morgan'); -const cors = require('cors'); +var createError = require("http-errors"); +var express = require("express"); +var path = require("path"); +var cookieParser = require("cookie-parser"); +var logger = require("morgan"); +const cors = require("cors"); //优先读取环境变量 -require("dotenv").config() +require("dotenv").config(); //引入数据库连接 -require("./dao/db") +require("./dao/db"); //引入路由 -const userRouter = require('./routes/user'); -const expressRouter = require("./routes/express") +const userRouter = require("./routes/user"); +const expressRouter = require("./routes/express"); +const addressRouter = require("./routes/address"); var app = express(); //配置cors const corsOptions = { - allowedHeaders: ['Content-Type', 'Authorization'], - exposedHeaders: ['Authentication', 'X-Custom-Header'], + allowedHeaders: ["Content-Type", "Authorization"], + exposedHeaders: ["Authentication", "X-Custom-Header"], credentials: true, -} +}; //为所有源跨域 -app.use(cors(corsOptions)) +app.use(cors(corsOptions)); //使用各种中间件 -app.use(logger('dev')); +app.use(logger("dev")); app.use(express.json()); -app.use(express.urlencoded({ - extended: false -})); +app.use( + express.urlencoded({ + extended: false, + }) +); app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public'))); +app.use(express.static(path.join(__dirname, "public"))); //使用路由中间件 -app.use('/user', userRouter); -app.use("/express", expressRouter) +app.use("/user", userRouter); +app.use("/express", expressRouter); +app.use("/address", addressRouter); // catch 404 and forward to error handler app.use(function (req, res, next) { @@ -47,11 +51,10 @@ app.use(function (req, res, next) { app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; + res.locals.error = req.app.get("env") === "development" ? err : {}; // render the error page res.status(err.status || 500); - }); -module.exports = app; \ No newline at end of file +module.exports = app; diff --git a/dao/addressDao.js b/dao/addressDao.js new file mode 100644 index 0000000..0e7e805 --- /dev/null +++ b/dao/addressDao.js @@ -0,0 +1,42 @@ +const { handleArrayDaoData } = require("../utils/tools"); +const addressModel = require("./model/addressModel"); + +module.exports.getAddressDao = async function () { + return handleArrayDaoData(await addressModel.findAll()); +}; + +module.exports.addAddressDao = async function (addressData) { + // 如果新增的是默认地址,需要先将其他地址设为非默认 + if (addressData.isDefault === 1) { + await addressModel.update({ isDefault: 0 }, { where: {} }); + } + await addressModel.create(addressData); + return handleArrayDaoData(await addressModel.findAll()); +}; + +module.exports.updateAddressDao = async function (addressData) { + // 如果更新的是默认地址,需要先将其他地址设为非默认 + if (addressData.isDefault === 1) { + await addressModel.update( + { isDefault: 0 }, + { + where: { id: { [Op.ne]: addressData.id } }, + } + ); + } + await addressModel.update(addressData, { + where: { + id: addressData.id, + }, + }); + return handleArrayDaoData(await addressModel.findAll()); +}; + +module.exports.deleteAddressDao = async function (id) { + await addressModel.destroy({ + where: { + id, + }, + }); + return handleArrayDaoData(await addressModel.findAll()); +}; diff --git a/dao/model/addressModel.js b/dao/model/addressModel.js new file mode 100644 index 0000000..a9c7d82 --- /dev/null +++ b/dao/model/addressModel.js @@ -0,0 +1,46 @@ +const sequelize = require("../dbConnect"); +const { DataTypes } = require("sequelize"); + +module.exports = sequelize.define( + "address", + { + receiver: { + type: DataTypes.STRING, + allowNull: false, + }, + contact: { + type: DataTypes.STRING, + allowNull: false, + }, + fullLocation: { + type: DataTypes.STRING, + allowNull: false, + }, + provinceCode: { + type: DataTypes.STRING, + allowNull: false, + }, + cityCode: { + type: DataTypes.STRING, + allowNull: false, + }, + countyCode: { + type: DataTypes.STRING, + allowNull: false, + }, + address: { + type: DataTypes.STRING, + allowNull: false, + }, + isDefault: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 0, + }, + }, + { + freezeTableName: true, + createdAt: false, + updatedAt: false, + } +); diff --git a/routes/address.js b/routes/address.js new file mode 100644 index 0000000..e342c1e --- /dev/null +++ b/routes/address.js @@ -0,0 +1,32 @@ +const express = require("express"); +const router = express.Router(); +const { + getAddressServices, + addAddressServices, + updateAddressServices, + deleteAddressServices, +} = require("../services/addressService"); +const { formatResponse } = require("../utils/tools"); + +router.get("/", async function (req, res, next) { + const data = await getAddressServices(); + res.send(formatResponse(0, "", data)); +}); + +router.post("/", async function (req, res, next) { + console.log(req, res); + const data = await addAddressServices(req.body); + res.send(formatResponse(0, "", data)); +}); + +router.put("/", async function (req, res, next) { + const data = await updateAddressServices(req.body); + res.send(formatResponse(0, "", data)); +}); + +router.delete("/", async function (req, res, next) { + const data = await deleteAddressServices(req.body); + res.send(formatResponse(0, "", data)); +}); + +module.exports = router; diff --git a/services/addressService.js b/services/addressService.js new file mode 100644 index 0000000..253abe1 --- /dev/null +++ b/services/addressService.js @@ -0,0 +1,29 @@ +const { + getAddressDao, + addAddressDao, + updateAddressDao, + deleteAddressDao, +} = require("../dao/addressDao"); + +module.exports.getAddressServices = async function () { + return await getAddressDao(); +}; + +module.exports.addAddressServices = async function (addressData) { + console.log(addressData); + // 确保isDefault是数字类型 + const data = { + ...addressData, + isDefault: addressData.isDefault || 0, + }; + return await addAddressDao(data); +}; + +module.exports.updateAddressServices = async function (addressData) { + // 这里需要提供id + return await updateAddressDao(addressData); +}; + +module.exports.deleteAddressServices = async function ({ id }) { + return await deleteAddressDao(id); +};