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