在項目中遇到這樣一個問題。 項目地址: https://github.com/ccyinghua/vue-node-mongodb-project/blob/master/07-shoppingCart.md 有一個good商品模型(models/goods.js) 還有一個user用戶模型(mod ...
在項目中遇到這樣一個問題。
項目地址: https://github.com/ccyinghua/vue-node-mongodb-project/blob/master/07-shoppingCart.md
有一個good商品模型(models/goods.js)
var mongoose = require('mongoose'); var Schema = mongoose.Schema; // 定義一個Schema var produtSchema = new Schema({ 'productId':String, // 或者 'productId':{type:String} 'productName':String, 'salePrice':Number, 'productImage':String }) // 輸出(導出) module.exports = mongoose.model('good',produtSchema);
還有一個user用戶模型(models/users.js)
var mongoose = require('mongoose'); var Schema = mongoose.Schema; // 定義一個Schema var userSchema = new Schema({ 'userId':String, // 或者 'userId':{type:String} 'userName':String, 'userPwd':String, 'orderList':Array, 'cartList':[ // 購物車列表 { "productId":String, "productName":String, "salePrice":Number, "productImage":String, "checked":String, // 是否選中 "productNum":String // 商品數量 } ], "addressList":Array }) // 輸出(導出) module.exports = mongoose.model('user',userSchema);
現需要根據good模型中根據商品id獲取數據,然後添加到user的購物車列表中,實現加入購物車功能;
// 加入到購物車 var Goods = require('../models/goods'); var User = require('../models/users.js'); // 引入user模型 router.post("/addCart",function(req, res, next){ var userId = '100000077', productId = req.body.productId; // post請求拿到res參數:req.body // 查詢第一條:拿到用戶信息 User.findOne({ userId:userId // 查詢條件 },function(err,userDoc){ if(err){ res.json({ status:"1", msg:err.message }) }else{ console.log("userDoc"+userDoc); // 用戶數據 if(userDoc){ let goodsItem = ''; userDoc.cartList.forEach(function(item){ // 遍歷用戶購物車,判斷加入購物車的商品是否已經存在 if(item.productId == productId){ goodsItem = item; item.productNum++; // 購物車這件商品數量+1 } }) if(goodsItem){ // 若購物車商品已存在 userDoc.save(function (err2,doc2) { if(err2){ res.json({ status:"1", msg:err2.message }) }else{ res.json({ status:'0', msg:'', result:'suc' }) } }) }else{ // 若購物車商品不存在,就添加進去 Goods.findOne({productId:productId},function(err1,doc){ // 從商品列表頁Goods查詢點擊加入購物車的那件商品信息 if(err1){ res.json({ status:"1", msg:err1.message }) }else{ if(doc){ doc.productNum = 1; doc.checked = 1; userDoc.cartList.push(doc); // 添加信息到用戶購物車列表中 userDoc.save(function(err2,doc2){ // 保存資料庫 if(err2){ res.json({ status:"1", msg:err2.message }) }else{ res.json({ status:"0", msg:'', result:'suc' }) } }) } } }) } } } }) })
在從mongodb的資料庫的goods表根據商品id獲取對應數據,再對此商品數據添加productNum和checked屬性,之後再插入到users表的購物車列表中;發現users表的購物車列表添加的商品信息沒有這兩個屬性。
解決辦法一:
在good模型內添加屬性是要在Schema添加這兩個屬性的;使用Mongoose取到的數據的結構是要依賴於定義的schema結構的。雖然我們給schema附加屬性,但是這隻是實現能真正掛在該schema上,並沒有添加到schema中。
var mongoose = require('mongoose'); var Schema = mongoose.Schema; // 定義一個Schema var produtSchema = new Schema({ 'productId':String, // 或者 'productId':{type:String} 'productName':String, 'salePrice':Number, 'productImage':String, // 添加的屬性 "checked":String, "productNum":Number }) // 輸出(導出) module.exports = mongoose.model('good',produtSchema);
解決辦法二:
新建一個對象,對象包含商品信息,添加到購物車列表。
var obj = null; if(doc){ obj = { productId: doc.productId, producName: doc.producName, salePrice: doc.salePrice, productName: doc.productName,
productImage: doc.productImage,
productNum: 1, checked: "1" } userDoc.cartList.push(obj); // 添加信息到用戶購物車列表中 userDoc.save(function(err2,doc2){ // 保存資料庫 if(err2){ res.json({ status:"1", msg:err2.message }) }else{ res.json({ status:"0", msg:'', result:'suc' }) } }) }