Mongo / Mongoose中的多对多参考设置

时间:2017-06-27 03:04:53

标签: node.js mongodb express curl mongoose

我在为Carts表编写curl脚本时遇到问题。 Carts表引用了User和Product表。这是模型:

'use strict'

const mongoose = require('mongoose')

const cartSchema = new mongoose.Schema({
  product: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Product',
    required: true
  },
  owner: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',
    required: true
  }
}, {
  timestamps: true,
  toJSON: {
    virtuals: true,
    transform: function (doc, ret, options) {
      const userId = (options.user && options.user._id) || false
      ret.editable = userId && userId.equals(doc._owner)
      return ret
    }
  }
})

const Cart = mongoose.model('Cart', cartSchema)

module.exports = Cart

因此,我可以使用insert命令在mongo shell的Carts表中创建一个文档:

db.cart.insert({"owner" : ObjectId("595153ad6f18427ef38c416b"), "product" : ObjectId("5951976290fe850d650ae4c1")})
WriteResult({ "nInserted" : 1 })

但是当我写一个像这样的卷曲脚本时:

curl -X POST \
  http://localhost:4741/carts \
  -H 'authorization: Token token=B3vDp2Ay310wxNjPx5EMecMSFmqnUnmnD98yeaLnsjs=--FXJqlTfi/3Xoj15rjF8wZhbMTHN2tkNZaN5ej+WAG4U=' \
  -H 'cache-control: no-cache' \
  -d '{
        "cart": {
             "owner" : ObjectId("595153ad6f18427ef38c416b"),
              "product" : ObjectId("5951976290fe850d650ae4c1")
          }
      }'

我收到此500内部服务器错误:

{
    "error": {
        "message": "Cannot convert undefined or null to object",
        "error": {}
    }
}

我不认为后端存在问题,因为当我到达localhost:4741 / carts url时,我可以看到我创建的文档。如果我能在这个问题上得到一双第二眼,我会非常感激。

- UPDATE -

跟进,所以我查看了我的控制器,看看我发送的是什么请求,这就是我发现的内容。这就是我对创建请求所拥有的内容:

const create = (req, res, next) => {
  console.log(req.body)
  const cart = Object.assign(req.body.cart, {
    owner: req.user._id,
    product: req.product._id

  })
  Cart.create(cart)
    .then(cart =>
      res.status(201)
        .json({
          cart: cart.toJSON({ virtuals: true, user: req.user })
        }))
    .catch(next)

当我记录' req.body'我明白了:

{ '{"cart": {"owner" : ObjectId("595153ad6f18427ef38c416b"), "product" : ObjectId("5951976290fe850d650ae4c1")}}': '' }
POST /carts 500 16.577 ms - 74

但是当我记录&req.body.cart'我明白了:

undefined
POST /carts 500 68.882 ms - 74

我是否使用节点主体解析器来传输未被读取的数据?我不知道接下来要做什么。

0 个答案:

没有答案