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