蜗牛影城后端开发
一 多表关联查询
电影集合movie的type(类别)字段关联到电影类别movieType表的_id(主键)
二 蜗牛影城后端开发
1 数据的导入导出
2 用户模块
UserModel.js
//导入mongoose,并解构出Schema(类)和model(对象)
const {Schema,model} = require("mongoose")
/**
* 创建Schema对象,该对象跟表的解构对应
*/
const userSchema = new Schema({
icon:String,
username:String,
password:String
},({versionKey:false}))
/**
* 暴露model对象
* 参数一 模型名称 参数二 Schema对象 参数三 表的名称
*/
module.exports = model("UserModel",userSchema,"userinfo")
UserController.js
//导入UserModel
const userModel = require("../model/UserModel")
/**
* 编写一个类
*/
class UserController{
/**
* 登录
* request
* response
*/
async login(req,res){
//获取前端请求的数据
const {username,password} = req.body
//查询数据库,结果是数组
const result = await userModel.find({username,password})
if(result.length > 0){
const {_id,icon,username} = result[0]
const user = {_id,icon,username}
res.send({code:200,msg:"登录成功",data:user})
}else{
res.send({code:500,msg:"账号或密码错误"})
}
}
/**
* 注册
*/
async register(req,res){
//获取前端请求的数据
const {username,password} = req.body
//判断账号是否存在
const r1 = await userModel.find({username})
if(r1.length > 0){
res.send({code:500,msg:"账号已存在,注册失败"})
return
}
//开始注册
await userModel.create({
username,
password
})
res.send({code:200,msg:"注册成功"})
}
/**
* 忘记密码,重置密码
*/
async resetPassword(req,res){
const {username,newPassword} = req.body
const result = await userModel.updateOne({username},{password:newPassword})
if(result.modifiedCount == 1){
res.send({code:200,msg:"密码重置成功"})
}else{
res.send({code:500,msg:"密码重置失败"})
}
}
}
module.exports = new UserController()
users.js
var express = require('express');
var router = express.Router();
//导入UserController
const userController = require("../controller/UserController")
router.post("/login",userController.login)
router.post("/register",userController.register)
router.post("/resetPassword",userController.resetPassword)
module.exports = router;
3 电影模块-关联查询
(1)电影表通过movieType2关联到电影类别表的_id
(2)在model中进行外键关联
关联的TypesModel文件一定要加载一次。
我们在MovieController中加载
(3)关联查询
const data = await MoviesModel_DB.find().populate("movieType2")
//导入模型层对象
const { default: mongoose } = require("mongoose");
const movieModel = require("../model/MovieModel")
//引入TypesModel
const typesModel = require("../model/TypesModel")
class MovieController{
/**
* 查询电影列表
*/
async findList(req,res){
const result = await movieModel.find()
res.send({code:200,msg:"查询成功",data:result})
}
/**
* 根据id查询
*/
async findById(req,res){
const {_id} = req.query
const result = await movieModel.find({_id}).populate("movieType2")
console.log(result);
const movie = result[0]
res.send({code:200,msg:"查询成功",data:movie})
}
}
module.exports = new MovieController()
4 影院模块
OpearModel.js
const {Schema,model} = require("mongoose")
const opearSchema = new Schema({
address:String,
img_src:String,
movies:String,
name:String,
phone:String
},({versionKey:false}))
module.exports = model("OpearModel",opearSchema,"opear")
OpearController.js
const opearModel = require("../model/OpearModel")
class OpearController{
/**
* 查询所有的影院
* @param {} req
* @param {*} res
*/
async findList(req, res){
let result = await opearModel.find()
console.log(result);
res.send({code:200,msg:"查询成功",data:result})
}
async findById(req, res){
const {_id} = req.query
let result = await opearModel.find({_id})
res.send({code:200,msg:"查询成功",data:result[0]})
}
}
module.exports = new OpearController()
opear.js
var express = require('express');
var router = express.Router();
//导入MovieController
const opearController = require("../controller/OpearController")
router.get("/findList",opearController.findList)
router.get("/findById",opearController.findById)
module.exports = router;
5订单模块
OrdersModel.js
const {Schema,model} = require("mongoose")
const orderSchema = new Schema({
code:String,
movieId:{
type:String,
ref:"MovieModel"
},
opearId:{
type:String,
ref:"OpearModel"
},
orderNo:String,
seats:String,
state:String,
time:String,
userId:{
type:String,
ref:"UserModel"
}
},({versionKey:false}))
module.exports = model("OrdersModel",orderSchema,"orders")
OrderController.js
const orderModel = require("../model/OrdersModel")
const movieModel = require("../model/MovieModel")
const opearModel = require("../model/OpearModel")
const userModel = require("../model/UserModel")
class OrderController{
/**
* 创建订单
*/
async createOrder(req,res){
const {movieId,opearId,seats,userId} = req.body
const code = Math.floor(Math.random()*900000+100000)//兑换码
const orderNo = new Date().getTime()
const time = new Date().toLocaleString()
await orderModel.create({
code,
movieId,
opearId,
orderNo,
seats,
state:1,
time,
userId
})
res.send({code:200,msg:"订单创建成功"})
}
/**
* 根据用户的id查询订单列表
*/
async findOrderByStateAnduserId(req,res){
const {userId,state} = req.query
let result
if(state){//查询待使用的电影票
result = await orderModel.find({userId,state}).populate("movieId").populate("opearId").populate("userId")
}else{//查询所有订单
result = await orderModel.find({userId}).populate("movieId").populate("opearId").populate("userId")
}
res.send({code:200,msg:"查询订单成功",data:result})
}
/**
* 根据订单id查询订单详情
*/
async findById(req,res){
const {_id} = req.query
const result = await orderModel.find({_id}).populate("movieId").populate("opearId").populate("userId")
res.send({code:200,msg:"根据id查询订单成功",data:result[0]})
}
}
module.exports = new OrderController()
order.js
var express = require('express');
var router = express.Router();
const orderController = require("../controller/OrderController")
router.post("/createOrder",orderController.createOrder)
router.get("/findOrderList",orderController.findOrderByStateAnduserId)
router.get("/findById",orderController.findById)
module.exports = router;