五、node系列之訂單接口的實現

在第二個章節中講解了用戶的登陸註冊,在第三個章節中講解了產品的相關接口設計,在第四個章節中講解了加入購物車的業務邏輯,現在講解一下訂單接口的實現

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系列之地址管理接口的實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章