从零开始,搭建一个简单的购物平台十

从零开始,搭建一个简单的购物平台(九):
https://blog.csdn.net/time_____/article/details/105465499
项目源码(持续更新):https://gitee.com/DieHunter/myCode/tree/master/shopping
拖更时间较长,公司这几个月项目高峰期,请见谅

这篇文章主要讲述后端管理系统新增的订单模块的部分内容(前端在之前的计划下稍稍改动,引入了订单的功能,但不包含支付功能),由于与用户管理和商品管理稍有不同,所以单独拎出来介绍一下

前端效果:

对于订单模块,主要功能有订单列表显示,订单状态修改(不涉及订单状态外其他数据修改),删除订单,新增订单(新增订单方面只做了简单的通过商品名索引来添加,考虑到管理系统的订单新增不是主要的功能,几乎用不上,所以没有细化功能),这篇文章主要介绍后端订单管理实现,接口对接。

服务端:

  • 首先我们需要在服务端配置一下数据库表结构,主要包含以下几个字段
        Order: {
          modelName: "orders",data: {
            orderId: {
              // 订单号
              type: String,required: true,},username: {
              //用户名
              type: String,phoneNum: {
              //手机号
              type: String,address: {
              //具体地址
              type: String,orderState: {
              //订单状态
              type: String,orderPrice: {
              // 订单总价
              type: String,shopList: {
              //商品列表
              type: Array,orderTime: {
              //订单创建时间
              type: String,

     

  • 使用npm start启动server
  • 然后在src目录下controller目录中新建order文件夹,用于订单接口,逻辑的实现,mod文件和之前一样,新建order表

  • 在order中引入依赖包,要注意的是,新增订单不仅仅是需要order一个表,还需要和user和shop表进行联动,因此我们需要调用其他接口逻辑中的方法,引入的包名如下
    const router = require("express").Router();//路由
    const UserMod = require("../user/mod");//user表联动
    const ShopMod = require("../shopList/mod");//shop表联动
    const Mod = require("./mod");//order表
    const Util = require("../../../utils/utils");//工具类
    const Config = require("../../../config/config");//配置文件
    const Bussiness = require("../../bussiness/bussiness");//接口逻辑
    const { addData,updateData,findData } = require("../../command/command");//数据库操作

     

  •  首先是新增订单接口,这个接口也是需要注意的和坑最多的地方,以下是检测用户,用户地址,商品是否存在

    let userFindRes = await Bussiness.hasUser(req,res,UserMod);//检测用户及地址是否存在
      if (!userFindRes) {
        return;
      }
      if (!userFindRes[0].alladdress || !userFindRes[0].address) {
        res.send({
          result: -1,msg: "添加失败,请完善收货地址",});
        return;
      }
      let shopFindRes = await findData(ShopMod,{//检测商品是否存在
        shopName: {
          $in: res._data.shopList.map((item) => {
            return item.shopName;
          }),});
      if (
        !shopFindRes ||
        !shopFindRes.length ||
        shopFindRes.length != res._data.shopList.length
      ) {
        res.send({
          result: -2,msg: "有商品不存在",});
        return;
      }

    下一步,将取出数据库信息(注意:数据库信息是只读,只能用数据库命令修改,所以不能用常规的堆内存存取需要用一个简单的堆变量复制)

    static deepCopy(org) {
        //简单的对象复制
        return JSON.parse(JSON.stringify(org));
      }

    使用拷贝函数,将数据库信息取出并进行后续修改

    let _shopFindRes = Util.deepCopy(shopFindRes); //解决数据库对象只读属性

    在返回前端之前,计算出总价和订单添加时间

    let _orderPrice;//初始化商品总价
      let _shopFindRes = Util.deepCopy(shopFindRes); //解决数据库对象只读属性
      _shopFindRes.forEach((item,index) => {//合计总费用
        if (index == 0) {
          _orderPrice = 0;
        }
        _shopFindRes[index].shopCount = res._data.shopList[index].shopCount;
        _orderPrice +=
          _shopFindRes[index].shopCount * _shopFindRes[index].shopPrice;
      });
    
      res._data = {
        ...res._data,username: userFindRes[0].username,phoneNum: userFindRes[0].phoneNum,address: userFindRes[0].alladdress.join("") + userFindRes[0].address,orderId: Util.createOrderNo(),orderTime: Util.joinDate(),shopList: _shopFindRes,orderPrice: _orderPrice,};
      let addRes = await addData(Mod,res._data);
      if (!addRes || !addRes.length) {
        res.send({
          result: 0,msg: "添加失败",});
        return;
      }
      res.send({
        result: 1,msg: "添加成功",orderId: res._data.orderId,});

     

  •  与订单查询,删除,修改相比新增订单是个逻辑不同的功能,代码能复用的地方较少,其余三个功能均可仿照商品和用户接口写法实现

  • 获取订单列表

    router.get(Config.ServerApi.orderList,Util.checkToken,async (req,res) => {
      Bussiness.findInfo(
        req,Mod,{
          orderTime: res._data.sort,//时间排序
        },{
          orderId: new RegExp(res._data.orderId,"i"),//orderId(订单号)模糊过滤
          username: new RegExp(res._data.keyWord,//订单用户名模糊过滤
          orderState: new RegExp(res._data.orderState,//订单状态模糊过滤
        }
      );
    });

     

  •  

    删除订单

     

    router.get(Config.ServerApi.delOrder,res) => {
      if (!Bussiness.isAdmin(res)) {
        return;
      }
      Bussiness.delInfo(req,Mod);
    });

     

  •  

    修改订单状态

    router.post(Config.ServerApi.updateOrder,res) => {
      let updateRes = await updateData(Mod,res._data._id,res._data);
      if (updateRes) {
        res.send({
          result: 1,msg: "修改成功",});
        return;
      }
      res.send({
        result: 0,msg: "修改失败",});
    });

    以上就是订单管理服务端接口和逻辑部分

总结:

编写面向对象代码与实现其功能时,尽量减少函数之间的耦合度(函数与函数之间的联系),使其复用性增强,大大节省开发效率

原文地址:https://blog.csdn.net/time_____

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于nodejs...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs怎么实现目录不存在自动创建”文章能帮助大...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs如何实现定时删除文件”文章能帮助大家解决疑惑...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
本篇内容主要讲解“怎么安装Node.js的旧版本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎...
这篇“node中的Express框架怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家...
这篇文章主要介绍“nodejs如何实现搜索引擎”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现搜索引擎...
这篇文章主要介绍“nodejs中间层如何设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs中间层如何设置”文...
这篇文章主要介绍“nodejs多线程怎么实现”,在日常操作中,相信很多人在nodejs多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
这篇文章主要讲解了“nodejs怎么分布式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么分布式”...
本篇内容介绍了“nodejs字符串怎么转换为数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
这篇文章主要介绍了nodejs如何运行在php服务器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs如何运行在php服务器文章都...
本篇内容主要讲解“nodejs单线程如何处理事件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs单线程如何...
这篇文章主要介绍“nodejs怎么安装ws模块”,在日常操作中,相信很多人在nodejs怎么安装ws模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
本篇内容介绍了“怎么打包nodejs代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!
本文小编为大家详细介绍“nodejs接收到的汉字乱码怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs接收到的汉字乱码怎么解决”文章能帮助大家解...
这篇“nodejs怎么同步删除文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇...
今天小编给大家分享一下nodejs怎么设置淘宝镜像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希