我在我的nodejs应用程序中有一个订单模型,需要在其中实现订单中的产品数量。
我已经将产品类型添加为(new mongoose.schema)并通过Joi对其进行验证,在本例中,我只能添加一个产品
以下是订单模型
const Order = mongoose.model('Order', new mongoose.Schema({
Name: {
type: String,
required: true,
minlength: 3,
maxlength: 50
},
OrderDate: {
type: Date,
default : Date.now
},
Address: {
type: String,
minlength: 3,
maxlength: 50,
required: true,
},
City: {
type: String,
minlength: 3,
maxlength: 50,
required: true,
},
Phone: {
type:Number,
required: true
},
Payment: {
type:String,
required: true
},
OrderPrice: {
type:String,
required: true
},
ShippingPrice:{
type:Number
},
customer: {
type: new mongoose.Schema({
UserName: {
type: String,
required: true,
minlength: 5,
maxlength: 50
},
Email: {
type: String,
unique : true,
required: true,
minlength: 5,
maxlength: 255
},Phone: {
type: Number,
required: true,
min :10
},
Address: {
type: String,
required: true,
minlength: 5,
maxlength: 50
}
}),
required: true
},
product:
{
type: new mongoose.Schema({
Pro_Name: {
type: String,
required: true,
minlength: 5,
maxlength: 50
},
Pro_Price: {
type: Number,
required: true
},
Pro_IMG: {
type: String,
minlength: 5,
maxlength: 50
},
// Pro_Qty: {
// type: Number,
// min: 1
// }
}),
require: true
}
}));
function validateOrder(order) {
const schema = {
Name: Joi.string().min(3).required(),
Address: Joi.string().required(),
City: Joi.string().required(),
Phone: Joi.number().required(),
Payment: Joi.string().required(),
OrderPrice: Joi.number().required(),
customerID:Joi.objectId(),
productID:Joi.objectId(),
};
return Joi.validate(order, schema);
}
router.post('/', async(req, res)=>{
const {error} = validate(req.body);
if (error) return res.status(404).send(error.details[0].message);
const customer = await Customer.findById(req.body.customerID);
if (!customer) return res.status(400).send('Invalid customer Pleas Login First.');
const product = await Product.findById(req.body.productID);
if (!product) return res.status(400).send('Invalid Product to be add in the cart');
//create the new Product
let newOrder = new Order({
Name: req.body.Name,
Address: req.body.Address,
City: req.body.City,
Phone: req.body.Phone,
Payment: req.body.Payment,
OrderPrice: req.body.OrderPrice,
customer: {
_id: customer.id,
UserName: customer.UserName,
Email:customer.Email,
Phone:customer.Phone,
Address:customer.Address
},
product: {
_id: product.id,
Pro_Name: product.Pro_Name,
Pro_Price:product.Pro_Price,
Pro_IMG:product.Pro_IMG
}
});
// try{
// new Fawn.Task()
// .save('orders' , newOrder)
// .update('product' , {_id:Product._id},{
// $inc: {numberInStock : -1 }
// })
// .run();
// res.send(newOrder);
// }
// catch(ex){
// res.status(500).send('Somthing bad has happend -_-.')
// }
newOrder = await newOrder.save();
res.send(newOrder);
});
{
"Name": "Hend Mohammed",
"Address": "This is Forth adress",
"City": "Giza",
"Phone": 12345689,
"Payment": "By HEND ^_^ With products and data a bout the customer",
"OrderPrice": 50000,
"customerID":"5cb18f625a9de34582475b22",
"productID" :"5ca11d5f9456812c79d21be6"
}
{
"_id": "5cb1a3b7c05d72523925bbac",
"Name": "Hend Mohammed",
"Address": "This is Forth adress",
"City": "Giza",
"Phone": 12345689,
"Payment": "By HEND ^_^ With products and data a bout the customer",
"OrderPrice": "50000",
"customer": {
"_id": "5cb18f625a9de34582475b22",
"UserName": "heba Mohammed",
"Email": "hebs47852@gmail.com",
"Phone": 12345678910,
"Address": "1235Adress"
},
"product": {
"_id": "5ca11d5f9456812c79d21be6",
"Pro_Name": "Cake updated",
"Pro_Price": 100,
"Pro_IMG": "Cake Image"
},
"OrderDate": "2019-04-13T08:54:15.994Z",
"__v": 0
}
这允许我添加一个产品,但我需要添加多个产品在订单中
如下定义,创建新的对象
模式ProductSchema
const productSchema = new mongoose.Schema({
Pro_Name: {
type: String,
required: true,
minlength: 5,
maxlength: 50
},
Pro_Price: {
type: Number,
required: true
},
Pro_IMG: {
type: String,
minlength: 5,
maxlength: 50
}
});
将此方案分配到您的orderschema
到product
中。
const model = new mongoose.Schema({
Product: [productSchema] <-- it will be as a array of objects
});
const Order = mongoose.model("Order", model);
然后Product将充当一个对象数组来存储多个产品。
这个问题是关于当用户将数据输入Number类型的输入时限制/验证输入。 我的问题是,当模型第一次加载时,任何整数或1dp的数字都只能用1dp呈现。例40或40.0都显示为40.0(而不是40.00)。 仅供参考,注释的呈现行不工作(错误:未识别setAttribute)-这是一个独立于平台的尝试。 所以问题是:我如何得到输入以2dps呈现其初始值?
我正在与来自不同项目的不同人员在线工作,他们负责后端API webservice。通常我在发送和接收JSON方面没有问题,但这次,我似乎无法正确地将JSON发送到服务器。 通常我使用Alamofire来接收和发送JSON消息,通常的调用如下: 但这一次,我得到了后端程序员要求我使用OAuthV2的项目。假设我已经开发了一个函数,它已经负责获取访问令牌字符串。该函数现在变成如下所示: 但结果不是40
问题内容: (这是一个Q /A风格的问题,是提出类似问题的人们的首选资源。很多人似乎迷失了最佳方法,因为他们不知道所有选择许多答案将特定于ASP.NET,但是AJAX和其他技术在其他框架中确实具有等效功能,例如socket.io和SignalR。) 我有一个在ASP.NET中实现的数据表。我想在页面上实时或接近实时显示对此基础数据的更改。我该怎么办? 我的模特: 代替此示例的实际数据库,我将把数据
问题内容: 当实现像队列这样的FIFO时,我的教练总是建议我们将其表示为圆形数组,而不是常规数组。为什么? 是因为在后者中,我们最终将在数组中包含垃圾数据吗? 问题答案: 如果您使用固定数量的Array-Slots / Elements,则以循环方式回收插槽比较容易,因为您不需要重新排列Elements的顺序。每当第一个Element以类似Array的方式移除时,您都必须将剩余的Elements向
问题内容: 我有一堂这样的课。 我这样绝望。 我的输出在小提琴手上看起来像这样(字符串sc) 但是我收到错误消息:无法将当前的JSON数组(例如[1,2,3])反序列化为这些代码中的错误类型。 谢谢 。 问题答案: 看起来该字符串包含其中包含单个对象的数组。如果从输入的两端删除方括号,则应该能够将数据反序列化为单个对象: 您也可以将数组反序列化为对象列表,然后将对象从索引零处取出。