我正在使用邮递员向POST
发送剩余mongoDb
请求(表单数据)。即使在提供模型中的所有键值对之后,也只有product _id
被存储到数据库中,而不是其他对象数组。这是我的模型架构:
const mongoose = require('mongoose');
const productSchema = mongoose.Schema({
name: String,
price: Number,
editor1: String,
year: String,
quantity: Number,
subject: String,
newProduct: String,
relatedProduct: String,
//coverImage: { type: String, required: false }
});
module.exports = mongoose.model('Product', productSchema);
这是我对产品的POST请求:
exports.products_create_product = (req, res, next) => {
const product = new Product(req.body);
product
.save()
.then(result => {
console.log(result);
res.status(201).json({
message: "Created product successfully",
createdProduct: {
name: result.name,
price: result.price,
_id: result._id,
request: {
type: "GET",
url: "http://localhost:3000/products/" + result._id
}
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
};
这是我的结果输出:
{
"message": "Created product successfully",
"createdProduct": {
"_id": "5b2df3420e8b7d1150f6f7f6",
"request": {
"type": "GET",
"url": "http://localhost:3000/products/5b2df3420e8b7d1150f6f7f6"
}
}
}
尝试了所有可能的解决方法,但徒劳无功。
答案 0 :(得分:0)
尝试callback
product.save((err,result) =>{
if(err){
res.status(500).json({
error: err
});
return false
}
res.status(201).json({
message: "Created product successfully",
createdProduct: {
name: result.name,
price: result.price,
_id: result._id,
request: {
type: "GET",
url: "http://localhost:3000/products/" + result._id
}
}
})
答案 1 :(得分:0)
首先让我们尝试了解为什么会这样吗? ,
在此方法中使用.json()
方法时,它将使用JSON.stringify()函数,该函数的作用是获取任何JavaScript值并将其转换为 JSON字符串例如>
let product = {
name : 'p1' ,
price : 200
}
console.log(JSON.stringify(product)); // {"name":"p1","price":200}
那很好,但是您应该知道,如果此函数在转换过程中看到任何未定义的值,它将被省略,
例如
let product = {
id:"23213214214214"
} // product doesn't have name property and its undefind
console.log(JSON.stringify({
id:product.id ,
name : product.name
})); // {"id":"23213214214214"}
如果您查看上面的示例,您将看到,由于name的值是** undefined **,您将获得JSON输出,但仅包含id值,并且未定义的任何值都不会出现在结果中
这是仅使用product即可获得结果的主要原因。_id因为未定义 price 和 name 之类的其他值。
那该怎么做才能解决这个问题呢?
req.body
并确保其具有名称和价格之类的属性,我认为这是问题的主要原因,因为当您创建产品变量时,它将仅具有_id道具,因为其他道具是不存在。答案 2 :(得分:0)
@mostafa是的,我确实尝试过。
{
"count": 3,
"products": [
{
"_id": "5b2e2d0cb70f5f0020e72cb6",
"request": {
"type": "GET",
"url": "https://aa-backend.herokuapp.com/products/5b2e2d0cb70f5f0020e72cb6"
}
},
{
"_id": "5b2e2d37b70f5f0020e72cb7",
"request": {
"type": "GET",
"url": "https://aa-backend.herokuapp.com/products/5b2e2d37b70f5f0020e72cb7"
}
},
{
这是我得到的唯一输出。