猫鼬-抛出`CastError:即使具有有效的ObjectId,也无法将其转换为ObjectId以获得路径中的值

时间:2018-10-28 18:02:12

标签: javascript node.js mongodb mongoose

我查看了一些有关此错误的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的类型?我很沮丧,尤其是对我来说,似乎我在上面所做的事情应该可以奏效。

0 个答案:

没有答案