Node.js 业务逻辑起作用,但Mongoose save不起作用;T
嗨,我正在尝试将数据从我的购物车应用程序保存到MongoDB数据库。在我的购物车控制器文件夹中,有Node.js 业务逻辑起作用,但Mongoose save不起作用;T,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,嗨,我正在尝试将数据从我的购物车应用程序保存到MongoDB数据库。在我的购物车控制器文件夹中,有getAllProducts、addOneProduct、removeOneProduct和updateOneProducts方法。除了updateOneProducts之外,它们都运行得非常好 console.log显示: 获取所有产品{id:[1,2,4],数量:[1,1,1]} 更新一个产品{id:[1,2,4],数量:[1,1,2]} 这表明业务逻辑工作正常。但是,该文件未在mLab上更新
getAllProducts
、addOneProduct
、removeOneProduct
和updateOneProducts
方法。除了updateOneProducts
之外,它们都运行得非常好
console.log显示:
获取所有产品{id:[1,2,4],数量:[1,1,1]}
更新一个产品{id:[1,2,4],数量:[1,1,2]}
这表明业务逻辑工作正常。但是,该文件未在mLab上更新
用户模型
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
username: String,
userID: String,
picture: String,
products: {
id: [Number],
qty: [Number],
}
});
const Users = mongoose.model('User', userSchema);
module.exports = Users;
更新产品
const extractProduct = (user) => {
const product = {};
product.id = user.products.id;
product.qty = user.products.qty;
return product;
}
// if user is logged in n changes the qty of a product, update the qty in database
const updateOneProduct = (req, res) => {
// if (!req.user) return res.status(401).json({ error: 'Unauthorized' });
const userId = req.user._id;
const event = req.body.event;
const productId = req.body.id;
return Users.findById(userId)
.then(user => {
const qty = user.products.qty;
const index = user.products.id.indexOf(productId);
if (index === -1) {
throw new Error(`Product doesn't exist!`);
}
const regex = /^[0-9\b]+$/;
if (event === 'plus') {
qty[index] += 1;
} else if (event === 'minus') {
qty[index] -= 1;
} else if (regex.test(event) && event !== '0') {
qty[index] = Number(event);
}
if (qty[index] === 0) {
user.products.id.splice(index, 1);
qty.splice(index, 1);
}
return user.save();
})
.then(user => {
const product = extractProduct(user);
console.log('UPDATE one product', product);
return res.status(200).json(product);
})
.catch(error => res.status(400).json({ error }));
}
所以我基本上克隆了user.products.qty数组,使用
constqty=[…user.products.qty]
,对其进行操作,并使用user.products.qty=qty
替换user.products.qty。最后,我使用return user.save()
保存它
由于某些原因,我无法修改子文档项目并保存它。我必须替换整个子文档user.products,然后保存以使其正常工作。我认为这也可能与PUT请求有关
// if user is logged in n changes the qty of a product, update the qty in database
const updateOneProduct = (req, res) => {
// if (!req.user) return res.status(401).json({ error: 'Unauthorized' });
const userId = req.user._id;
const event = req.body.event;
const productId = req.body.id;
return Users.findById(userId)
.then(user => {
const qty = [...user.products.qty];
const index = user.products.id.indexOf(productId);
if (index === -1) {
throw new Error(`Product doesn't exist!`);
}
const regex = /^[0-9\b]+$/;
if (event === 'plus') {
qty[index] += 1;
} else if (event === 'minus') {
qty[index] -= 1;
} else if (regex.test(event) && event !== '0') {
qty[index] = Number(event);
}
if (qty[index] === 0) {
user.products.id.splice(index, 1);
qty.splice(index, 1);
}
user.products.qty = qty;
return user.save();
})
.then(user => {
console.log('UPDATE - After save promise', user.products);
return res.status(200).json(user.products);
})
.catch(error => res.status(400).json({ error }));
}
您不是从用户而不是从productHi获取数据,product对象位于如上所示的用户模型中。