我在为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
我是否使用节点主体解析器来传输未被读取的数据?我不知道接下来要做什么。