express+mysql+vue,从零搭建一个商城管理系统9--添加商户

news2024/11/16 9:26:19

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

文章目录

  • 前言
  • 一、新建models/shop.js
  • 二、新建routes/shop.js
  • 三、修改routes下的index.js
  • 四、添加商户
  • 总结


前言

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

一、新建models/shop.js

models/shop.js

const query = require('../config/db');
const bcrypt = require('../config/bcrypt');
const md5 = require('md5');
const jwt = require('../config/jwt');
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 shopDao = {
    //注册
    addShopByUserId:async(data)=>{
        //验证账号密码格式
        const validateResult =shopDao.validateShopName(data);
        if(!validateResult.success)return errFun(validateResult.msg);
        //查询商户名是否已存在
        const userResult = await shopDao.queryShopByShopName(data);
        if(userResult.success)return errFun('商户名已存在');
        //生成shopId
        const shopId = md5(data.shopName+secretKey);
        //根据shopName查询shop
        const sql = `insert into shop (shopId,shopName,createId) values('${shopId}','${data.shopName}','${data.createId}')`;
        const result = await query(sql);
        if(result&&result.affectedRows==1)return sucFun({},'添加商户成功');
        return errFun('添加商户失败');
    },
    //通过商户名查询商户信息
    queryShopByShopName:async(data)=>{
        //根据shopName查询shop
        const sql = `select * from shop where shopName='${data.shopName}'`;
        const result = await query(sql);
        if(result&&result.length>0)return sucFun(result[0],'查询商户成功');
        return errFun('查询商户失败');
    },
    //通过商户名查询商户信息
    queryShopByShopId:async(data)=>{
        //根据shopName查询shop
        const sql = `select * from shop where shopName='${data.shopName}'`;
        const result = await query(sql);
        if(result&&result.length>0)return sucFun(result[0],'查询商户成功');
        return errFun('查询商户失败');
    },
    //验证商户名密码
    validateShopName:(data)=>{
        //只包含大小写字母数字,包含1种即可
        let nameReg = /[\da-zA-z]{6,16}$/;
        let nameValidate = nameReg.test(data.shopName);
        if(!nameValidate)return errFun('商户名格式错误');
        return sucFun({},'商户名格式正确');
    },
}

module.exports = shopDao;

在这里插入图片描述

二、新建routes/shop.js

routes/shop.js

const shopDao = require('../models/shop');
const shopRoutes = (router)=>{
    router.post('/shop/addShopByUserId',async (req,res)=>{
        const result = await shopDao.addShopByUserId(req.body);
        res.json(result);
    });
}
module.exports = shopRoutes;

在这里插入图片描述

三、修改routes下的index.js

读取routes文件夹下的所有文件列表,过滤去掉index.js之后,引入并实例化剩余route
一劳永逸,不用每次添加route文件,都得修改index.js文件

const fs = require('fs');
const routes = (router)=>{
    const files = fs.readdirSync(__dirname)||[];
    files.forEach(item=>{
        if(item.indexOf('index')==-1)require(__dirname+'/'+item)(router);
    })
}

module.exports = routes;

在这里插入图片描述

四、添加商户

url:http://localhost:1990/shop/addShopByUserId
name:/shop/addShopByUserId
params:{
	"shopName": "shop01",
	"createId": "d9ef196010ee41be28ba70a0f819da9d"
}

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

params:{
	"shopName": "shop01",
   	"createId": "e9fd658aa2e171a3c145c4586d750b50"
}

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

总结

踩坑路漫漫长@~@

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python数据分析案例38——我国个人工作总收入影响因素分析

案例背景 偶然之间找到了CSFP(中国家庭追踪调查)的数据集,一个很全的家庭调查数据集。所以就想对大家现在最关心的工资和其影响因素做一点分析。 得到的结论还挺有价值的,有符合逻辑的,也有反直觉的。 数据来源 CFPS由北京大学中国社会科学…

element loading遮罩层添加按钮

<el-table v-loading"loadingText" element-loading-text"拼命加载中" :data"tableData" :tableColumn"tableColumn" :span-method"objectSpanMethod" border :cell-style"cellStyle" :header-cell-style"…

现代信号处理学习笔记(三)信号检测

通过观测数据判断信号是否存在&#xff0c;这一问题称为信号检测。 目录 前言 一、统计假设检验 1、信号检测的基本概念 2、信号检测理论测度 比率测度 概率测度 3、决策理论空间 二、概率密度函数与误差函数 1、概率密度函数 2、误差函数与补余误差函数 三、检测概…

第二证券|飞行汽车最大订单诞生,万亿级产业待起飞!概念股早盘大涨

开年以来&#xff0c;飞翔轿车赛道利好不断。 飞翔轿车草创公司斩获大订单 据媒体报道&#xff0c;美国飞翔轿车草创公司Alef Aeronautics表明&#xff0c;其电动笔直起降&#xff08;eVTOL&#xff09;飞翔器的预定最近创下了新纪录&#xff0c;订单量已到达2850份。埃隆马斯…

Cesium绘制带有方向的线

export const MAP_3D_BEGIN_CALC (lineStringData, geoData) > {// 画方向线map.entities.add({name: uav-tmp-line,polyline: {positions: Cesium.Cartesian3.fromDegreesArray(lineStringData),material: new Cesium.PolylineArrowMaterialProperty(Cesium.Color.RED),//…

windows下tensorflow-gpu2.5+cudn11.2+cudnn8.1环境配置

1.下载visualStidio2019&#xff08;cudn要用到&#xff09; 要下载2019版本&#xff0c;2022好像不很适配&#xff0c;cudn11.2以上的版本或许可以尝试 visualstidio官网是2022版本&#xff0c;找2019的下载Visual Studio 2019 版本 16.11 发行说明 | Microsoft Learn 勾选…

【C语言】Leetcode 206.反转链表

博主主页&#xff1a;17_Kevin-CSDN博客 收录专栏&#xff1a;《Leetcode》 题目 解决思路 思路一&#xff1a;翻转链表 struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return NULL;}struct ListNode* n1 NULL,*n2 head,*n3 n2 -> next;while(…

ChatGPT Plus 如何开启插件

ChatGPT Plus 如何开启插件 购买完 ChatGPT Plus 会员之后&#xff0c;需要手动开启才能使用 GPT 的插件和 Code interpreter服务。 ​ 具体步骤如下&#xff1a; 1. 进入设置 点击左下角个人邮箱的位置&#xff0c;在弹窗中选择 Settings &Beta 2. 开启选项 在设置选…

紫光展锐T618_4G安卓核心板方案定制

紫光展锐T618核心板是一款采用纯国产化方案的高性能产品&#xff0c;搭载了开放的智能Android操作系统&#xff0c;并集成了4G网络&#xff0c;支持2.5G5G双频WIFI、蓝牙近距离无线传输技术以及GNSS无线定位技术。 展锐T618核心板应用旗舰级 DynamlQ架构 12nm 制程工艺&#x…

以线缆行业为例,工业智能网关的实际应用及其带来的变革-天拓四方

工业智能网关是一种集数据采集、传输、处理和分析于一体的智能化设备。它能够实现对工业现场各种传感器、执行器等设备的数据进行实时采集&#xff0c;并通过网络传输到云端或本地数据中心进行分析处理。同时&#xff0c;工业智能网关还具备边缘计算能力&#xff0c;能够在本地…

Domain Adaptation Vs. Prompt-Tuning:能否用域自适应解决大模型提示学习问题?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 作者简介 李江梦&#xff0c;中国科学院软件研究所天基综合信息系统全国重点实验室助理研究员 论文简介 今天介绍的是被机器学习领域顶级学术会议ICLR 2024接收的论文&#xff1a;BayesPrompt: Prompting Large…

国创证券|AI手机PC概念拉升,福蓉科技4连板,思泉新材大涨

AI手机PC概念大幅走高&#xff0c;到发稿&#xff0c;思泉新材涨近15%&#xff0c;盘中一度涨停&#xff1b;道明光学、福蓉科技均涨停&#xff0c;诚迈科技涨近8%&#xff0c;亿道信息涨逾6%。 值得注意的是&#xff0c;福蓉科技已接连4个交易日涨停。公司4日晚间发布危险提示…

Qt 实现橡皮擦拭显示图片

1.简介 在一些游戏中看见类似解密破案的效果&#xff0c;使用手触摸去擦拭图片上的灰尘&#xff0c;然后显示最终的图片&#xff0c;所以也想试试Qt实现的效果。大家有自己想做的效果&#xff0c;都可以尝试。 以下是效果展示图。 可以控制橡皮擦的大小&#xff0c;进行擦拭…

nginx 配置404 及 nginx demo

郭永坤123/nginx-demo nginx demo&#xff1a; 包含 &#xff1a; 负载均衡 自定义conf 反向代理

基于Springboot的助农管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的助农管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

Linux系统使用宝塔面板安装MySQL服务并实现公网远程访问本地数据库【内网穿透】

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

typedef定义结构体--声明结构体变量--指向该类型的指针

// 结构体指针.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // //#define _CRT_SECURE_NO_WARNINGS //在C或C程序中&#xff0c;#define _CRT_SECURE_NO_WARNINGS 是一个预处理指令&#xff0c; //用于在编译时禁止特定的安全警告。这些警告通常与使…

#QT(程序打包)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;打包到windows&#xff08;exe文件&#xff09; 3.记录&#xff1a; &#xff08;1&#xff09;切换工厂到"release"&#xff0c;release模式基本没有调试信息&#xff0c;比较精简&#xff0c;debug模式有很多调试信…

第1章:绪论 1.1数据库系统概述

文章目录 1.1 数据库系统概述1.1.1 数据库的4个基本概念1.1.2 数据管理技术的产生和发展1.1.3 数据库系统的特点 1.1 数据库系统概述 1.1.1 数据库的4个基本概念 数据(Data) 是数据库中存储的基本对象 数据的定义&#xff1a;描述事物的符号记录 数据的种类&#xff1a;文本、…

京津冀光伏展

京津冀光伏展是中国在京津冀地区举办的一项光伏产业展览活动。该展览旨在展示京津冀地区光伏产业的最新发展成果&#xff0c;促进光伏行业的交流与合作&#xff0c;推动光伏产业的可持续发展。 光伏产业是指利用太阳能将光能转化为电能的产业。作为一种清洁能源&#xff0c;光伏…