express+mysql+vue,从零搭建一个商城管理系统16--收货地址(全国省市县名称和code列表)

提示:学习express,搭建管理系统

文章目录

  • 前言
  • 一、新建config/area.js
  • 二、新建models/address.js
  • 三、新建dao/address.js
  • 四、新建routes/address.js
  • 五、添加地址
  • 六、查询用户地址列表
  • 总结


前言

需求:主要学习express,所以先写service部分

一、新建config/area.js

内容太多,没办法粘贴,资源里自取

在这里插入图片描述

二、新建models/address.js

models/address.js

const { DataTypes } = require('sequelize');
const sequelize = require('../config/db');

const AddressModel = sequelize.define('Address',{
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    addressId:{
        type:DataTypes.STRING ,
        comment:'地址ID',
    },
    createId:{
        type:DataTypes.STRING ,
        comment:'创建人ID',
    },
    createName:{
        type:DataTypes.STRING ,
        comment:'创建人姓名',
    },
    provinceCode:{
        type:DataTypes.STRING ,
        comment:'省code',
    },
    provinceName:{
        type:DataTypes.STRING ,
        comment:'省',
    },
    cityCode:{
        type:DataTypes.STRING ,
        comment:'市code',
    },
    cityName:{
        type:DataTypes.STRING ,
        comment:'市',
    },
    areaCode:{
        type:DataTypes.STRING ,
        comment:'县code',
    },
    areaName:{
        type:DataTypes.STRING ,
        comment:'县',
    },
    fullAddress:{
        type:DataTypes.STRING(255),
        comment:'详细地址',
    },
    recipientName:{
        type:DataTypes.STRING ,
        comment:'收件人',
    },
    phone:{
        type:DataTypes.STRING(30),
        comment:'手机号码',
    },
},{
    tableName:'address'
});

//无address表创建address表
AddressModel.sync();
module.exports = AddressModel;

在这里插入图片描述

三、新建dao/address.js

dao/address.js

const AddressModel = require('../models/address');
const md5 = require('md5');
const secretKey = 'longlongago';

const errFun = (msg,code)=>{
    return {
        code:code||500,
        success:false,
        msg:msg||'操作失败'
    }
}
const sucFun = (data,msg)=>{
    return {
        code:200,
        success:true,
        msg:msg||'操作成功',
        data,
    }
}
const AddressDao = {
    //添加地址
    addAddress:async(data)=>{
        //生成addressId
        const addressId = md5(data.createdId+secretKey+new Date().getTime());
        //添加address
        try {
            const address = await AddressModel.create({...data,addressId});
            if(!address) errFun('添加地址失败!');
            return sucFun(address,'添加地址成功!')
        }catch(err){
            return errFun('添加失败');
        }
    },
    //获取用户地址列表
    queryAddressListByUserId:async(data)=>{
        //根据userId查询address
        try{
            const addressList = await AddressModel.findAll({createId:data.createId});
            if(addressList&&addressList.length>0)return sucFun(addressList,'查询用户地址列表成功');
            return errFun('查询用户地址列表失败');
        }catch(err){
            return errFun('查询失败');
        }
    },
}

module.exports = AddressDao;

在这里插入图片描述

四、新建routes/address.js

const AddressDao = require('../dao/address');
const AREA = require('../config/area');
const AddressRoutes = (router)=>{
    //添加地址
    router.post('/address/addAddress',async (req,res)=>{
        const result = await AddressDao.addAddress(req.body);
        res.json(result);
    });
    //获取用户地址列表
    router.post('/address/queryAddressListByUserId',async (req,res)=>{
        const result = await AddressDao.queryAddressListByUserId(req.body);
        res.json(result);
    });
    //获取省市县
    router.get('/address/getPCA',async (req,res)=>{
        
        res.json(AREA);
    });
}
module.exports = AddressRoutes;

在这里插入图片描述

五、添加地址

url:http://localhost:1990/address/addAddress
params:{
    "createId":"9e14ebba3be0ae546374e8f5a49f9e80",
    "createName":"long001",
    "provinceCode":"110000",
    "provinceName":"北京市",
    "cityCode":"110100",
    "cityName":"市辖区",
    "areaCode":"110108",
    "areaName":"海淀区",
    "fullAddress":"西小口路xxxxxxxxxxxxx",
    "recipientName":"zzz",
    "phone":"1891193zzzz"
}
params:{
    "createId":"9e14ebba3be0ae546374e8f5a49f9e80",
    "createName":"long001",
    "provinceCode":"110000",
    "provinceName":"北京市",
    "cityCode":"110100",
    "cityName":"市辖区",
    "areaCode":"110108",
    "areaName":"海淀区",
    "fullAddress":"五道口路xxxxxxxxxxxxx",
    "recipientName":"xxx",
    "phone":"1891193xxxx",
}

在这里插入图片描述
在这里插入图片描述

六、查询用户地址列表

url:http://localhost:1990/address/queryAddressListByUserId
params:{
   "createId": "9e14ebba3be0ae546374e8f5a49f9e80"
}

在这里插入图片描述

总结

踩坑路漫漫长@~@

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/472051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ANOMALY TRANSFORMER: TIME SERIES ANOMALY DETECTION WITH ASSOCIATION DISCREPANCY

论文题目: ANOMALY TRANSFORMER: TIME SERIES ANOMALY DETECTION WITH ASSOCIATION DISCREPANCY 发表会议:ICLR 2022 论文地址:https://openreview.net/pdf?idLzQQ89U1qm_ 论文代码:https://github.com/thuml/Anomaly-Transforme…

七、Java中SpringBoot组件集成接入【Minio文件服务器】

七、Java中SpringBoot组件集成接入【Minio文件服务器】 1.Minio介绍2.搭建Minio服务2.1Windows部署2.2Linux部署2.3docker部署 3.Minio可视化操作4.SpringBoot接入Minio1.添加maven依赖2.yaml配置文件3.配置类4.工具类5.控制类 5.常见问题6.其他参考文章 1.Minio介绍 对象存储…

设计模式深度解析:适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼 探索设计模式的魅力:深入了…

Day16-【Java SE进阶】IO流(二):字符流、缓冲流、转换流、打印流、数据流、序列化流、IO框架

一. 字符流 字节流:适合复制文件等,不适合读写文本文件 字符流:适合读写文本文件内容 1. FileReader(文件字符输入流) 作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去。读取单个字符,性能比较差&a…

【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对

本文涉及知识点 位运算 数学 哈希映射 LeetCode 2857. 统计距离为 k 的点对 给你一个 二维 整数数组 coordinates 和一个整数 k ,其中 coordinates[i] [xi, yi] 是第 i 个点在二维平面里的坐标。 我们定义两个点 (x1, y1) 和 (x2, y2) 的 距离 为 (x1 XOR x2) …

PMP备考心得 | 策略与技巧大揭秘

1.理解考试大纲:首先,你需要熟悉PMP考试的内容和结构。PMI官网提供了详细的考试大纲,包括项目管理的五个过程组(启动、规划、执行、监控、收尾)和十个知识领域; 2.制定学习计划:根据个人的时间…

【C语言】基本语法知识C语言函数操作符详解

主页:醋溜马桶圈-CSDN博客 专栏:C语言_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.基本语法 1.1 代码解释 1.1.1 main()主函数 1.1.2 int 1.1.3 { } 1.1.4 printf()库函数 1.1.5 stdio.h头文件 1.2 C语言的…

突破边界:Web3开启数字化社会的新纪元

引言 随着科技的不断进步和数字化社会的发展,Web3正逐渐成为了人们关注的焦点。作为新一代互联网的演进形态,Web3具有突破传统边界、实现去中心化的特点,被认为将开启数字化社会的新纪元。本文将深入探讨Web3的概念、特点、应用场景&#xf…

VueUse常见方法使用

npm i vueuse/core 1、useDebounceFn 节流防抖 import { useDebounceFn } from vueuse/core<button type"button" class"search" click"query">查询</button>// 查询 获取table数据const query2 async () > {try {const res …

MySQL 多表查询强化练习

环境准备 create table dept(id int PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50) ); insert into dept values (10,研发部,北京), (20,学工部, 上海), (30,销售部,广州 ), (40,财务部,深圳);create table job(id int PRIMARY KEY,jname VARCHAR(20),descripition VARCHAR(…

latex如何对一段文本进行加粗

在LaTeX中&#xff0c;你可以使用\textbf{}命令来对一段文本进行加粗。例如&#xff1a; \textbf{这是要加粗的文本}这将会把"这是要加粗的文本"这段文字显示为加粗。 如果你想要对整段文本进行加粗&#xff0c;你可以将整段文本都放在\textbf{}命令中&#xff0c;…

jsp学习

1.新建文件&#xff0c;创建web动态项目 2.项目点击next两下&#xff0c;点击勾选gentear&#xff0c;点击finish 3.文件成功后是有jsp文件 4.在webapp新建jsp文件 5. 使用模板html5建立文件 <% page language"java" contentType"text/html; charsetUTF-8&qu…

西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)

前言 在学习到这部分时&#xff0c;对 ℓ-rank 以及AUC的关系难以理解透彻&#xff0c;在网上看到其他博主也并未弄明白&#xff0c;大家大多写自己的理解&#xff0c;我希望您在看完这篇文章时能够深刻理解这二者的关系&#xff0c;如果我的理解有误&#xff0c;希望您在评论…

数据结构 之 二叉树

&#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff01;&#xff01;&…

python网络爬虫实战教学——urllib的使用(1)

文章目录 专栏导读1、前言2、urllib的使用3、发送请求3.1 urlopen3.2 request 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对…

mysql 数据库 基本介绍

一 数据 &#xff08;一&#xff09;数据是什么 描述事物的符号记录 包括数字&#xff0c;文字、图形、图像、声音、档案记录气 以“记录”形式按统一的格式进行存储 &#xff08;二&#xff09;数据的分类 1&#xff0c;结构化的数据 即有固定格式和有限长度的数据。例…

01_Kubernetes基础

Kubernetes为什么叫K8S&#xff1a;因为K和S之间有8个字母 为什么需要K8S 对于云计算来说有自己的交互标准 Paas的下一代标准就是容器化&#xff0c;容器的集群化有没有很好的方案&#xff1f;有需求就会有产品&#xff0c;这个产品就叫做资源管理器。 首先是Apache的MESOS&…

Linux虚拟主机默认隐藏文件,如何开启显示

收到一位用户反馈他买了Hostease Linux虚拟主机&#xff0c;想要知道主机默认隐藏文件如何开启。据悉目前大部分主机提供商出售的Linux虚拟主机带的都是cPanel面板&#xff0c;因此开启隐藏文件操做需要进入到cPanel面板。操做步骤如下&#xff1a; 1.首先需要先登陆cPanel面板…

深度强化学习03价值学习

Q*类似于先知&#xff0c;知道动作的后果 价值学习是得到一个近似的价值函数

【Linux】Linux安装软件---软件包管理器 yum

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.Linux中安装软件 1.1 源代码安装 1.2 rpm包安装 1.3 yum安装 1.3.1 举例 1.3.2 图示yum下载安装 2.Linux系统的生态 如何选…