mongoDb数据库表单数据空响应

时间:2018-06-23 07:55:23

标签: node.js mongodb rest

我正在使用邮递员向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"
        }
    }
}

尝试了所有可能的解决方法,但徒劳无功。

3 个答案:

答案 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"
        }
    },
    {

这是我得到的唯一输出。