五、node系列之订单接口的实现

6 篇文章 1 订阅
1 篇文章 1 订阅

在第二个章节中讲解了用户的登陆注册,在第三个章节中讲解了产品的相关接口设计,在第四个章节中讲解了加入购物车的业务逻辑,现在讲解一下订单接口的实现

1、创建订单路由模块 myapp/routes/order.js

var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
  res.send('订单页面')
});

module.exports = router;

2、app.js中注册路由

var orderRouter = require('./routes/order');
app.use('/order', orderRouter);

3、设计订单的集合

// sql/collection/orders.js
const mongoose = require('../db.js'); // 引入数据库连接模块
const Schema = mongoose.Schema; // 拿到当前数据库相应的集合对象

const orderSchema = new Schema({
  orderid: {type: String },
  userid: { type: String },
  status: { type: Number }, // 订单状态 0 待付款 1 待收货(已支付) 2 待评价 3 全部订单
  name: { type: String }, // 收货人
  tel: { type: String }, // 手机
  address: { type: String }, // 地址
  note: { type: String }, // 备注
  list: { type: Array }
})

module.exports = mongoose.model('Order', orderSchema);

4、添加订单接口实现

获取前端提交的选中的产品数据,以及用户的id,生成订单id,遍历前端提交的购物车信息,组合数据,完成订单信息的插入

router.get('/add', (req, res, next) => {
  // res.send(req.query)
  // 1、获取前端提交的订单数据 "[{},{},{}]" -- 转成对象
  let list = JSON.parse(req.query.str)
  let userid = req.query.userid // 获取用户id
  let orderid = 'order_' + uuid.v1() // 生成订单的id
  let arr = [] // 订单列表数据
  // res.send(list)
  list.map(item => { // 遍历数据,获取订单的信息
    arr.push({
      proid: item.proid,
      proimg: item.proimg,
      proname: item.proname,
      price: item.price * 1,
      num: item.num * 1
    })
  })
  // 插入数据库
  sql.insert(Order, {
    orderid: orderid,
    userid: userid,
    status: 0, // 订单状态 0 待付款 1 待收货(已支付) 2 待评价
    name: '',
    tel: '',
    address: '',
    note: '',
    list: arr
  }).then(() => {
    // 生成订单后要删除购物车的数据
    let p1 = list.map(item => {
      return sql.delete(Cart, { cartid: item.cartid })
    })

    return Promise.all(p1)
  }).then(() => {
    res.send({
      code: '200',
      message: '生成订单',
      data: { // 用于在确认订单页面 查询订单的信息
        orderid: orderid
      }
    })
  })
})

5、查看订单的列表

根据用户id和订单id查询当前订单数据

// 订单
router.get('/', function(req, res, next) {
  // 获取订单的状态
  let status = req.query.status
  // 查询订单的信息 用户id和订单的id
  let findData = { userid: req.query.userid, orderid: req.query.orderid }
  if (status) { // 如果没有传值,那么查询全部的数据
    findData.status = status
  }
  sql.find(Order, findData, { _id: 0 }).then(data => {
    res.send({
      code: '200',
      message: '订单列表',
      len: data.length,
      data: data
    })
  })
});

6、删除订单信息

依据订单id可以删除当前订单信息

// 删除订单
router.get('delete', function(req, res, next) {
  let findData = { orderid: req.query.orderid }
  sql.delete(Order, findData).then(data => {
    res.send({
      code: '200',
      message: '删除成功'
    })
  })
});

7、修改订单信息

// 修改订单
router.get('update', function(req, res, next) {
  let { name, tel, address, note } = req.query
  let findData = { orderid: req.query.orderid }
  sql.delete(Order, findData, { $set: { name, tel, address, note }}).then(data => {
    res.send({
      code: '200',
      message: '修改成功'
    })
  })
});

8、预告

下次分享node系列之地址管理接口的实现

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值