我查看了一些有关此错误的SO帖子,但是没有建议解决我的问题。
这是我的错误:
CastError: Cast to ObjectId failed for value "" at path "belongsTo"
这是我的Customer
控制器文件。在它的内部,我有一个customer_add
控制器,它保存着一个新客户,并带有一个belongsTo
属性,该属性充满了user _id
:
const mongoose = require('mongoose');
const User = require('../../models/api/User');
const Customer = require('../../models/api/Customer');
exports.customer_add = (req, res) => {
const { body, params } = req;
const { name, email, phone, contact, street,
city, state, zipcode, dotInterval } = body;
const { userid } = params;
User.findOne({ _id: userid }, (err, user) => {
if (err) {
throw err;
}
//console.log(typeof user._id);
const customer = new Customer({
belongsTo: user._id,
name: name,
contact: contact,
email: email,
phone: phone,
address: {
street: street,
city: city,
state: state,
zipcode: zipcode,
},
dotInterval: dotInterval,
});
customer.save((err) => {
if (err)
throw err;
else
res.send('Customer saved');
});
});
};
当我尝试将user._id
保存到belongsTo
时,显然出现了问题,但是我不确定为什么。在user._id
的回调中返回的User.findOne()
返回有效值,当我console.log(typeof user._id)
时,我被告知返回的_id
确实是一个对象。
因此,我正在寻找正确的用户,并找回_id
作为对象。错误消息让我最困惑,因为它似乎表明Cast to ObjectId failed for value "" at path 'belongsTo'
意味着分配给belongsTo
的值是空的?
Customer
模型的外观如下。 (我删除了belongsTo
以外的所有内容,以显示如何在架构中对其进行定义):
const mongoose = require('mongoose');
const CustomerSchema = new mongoose.Schema({
belongsTo: {
type: mongoose.Schema.Types.ObjectId,
default: '',
},
});
module.exports = mongoose.model('Customer', CustomerSchema);
根据我的推测,也许我错误地定义了belongsTo
的类型?我很沮丧,尤其是对我来说,似乎我在上面所做的事情应该可以奏效。