为什么这段猫鼬代码会收到强制转换错误?

问题描述 投票:0回答:1

我在定义模型时犯了错误,还是服务器代码的编写方式有错误?

我收到的错误是: 错误:CastError:转换为 [ObjectId] 失败,值“[ { 联系人:新的 ObjectId(ID_OF_CONTACT_STRING),标题:'测试' } ]”(类型字符串)位于路径“relations.0”,因为“CastError”

具有关系字段的猫鼬模型如下所示:

const ContactSchema = new Schema(
  {
    ...
    relations: [{
      contact: {
        type: Schema.Types.ObjectId,
        ref: 'Contact'
      },
      title: String
    }],
    ...
  },
  {
    timestamps: true
  }
)

然后我有以下服务器代码:

export default async function handler(req, res) {
  await connectDB();

  if (!(req.body.relationId && req.body.contactId && req.body.relationTitle)) {
    return res.status(400).json({ error: true, message: "Bad params", code: 1 });
  }

  if (!req.cookies.agent) {
    return res.status(401).json({ error: true, message: "Not logged in", code: 202 });
  }

  try {
    const contact = await Contact.findById(req.body.contactId);
    const relation = await Contact.findById(req.body.relationId);

    if (!contact || !relation) {
      return res.status(404).json({ error: true, message: "Invalid contact or relation", code: CONTACT_NOT_FOUND_CODE });
    }

    console.log(contact._id, "contact id")
    console.log(relation._id, "object id")

    const newRelation = { contact: relation._id, title: req.body.relationTitle };

    console.log(newRelation, "new relation")
    
    //ERROR HAPPENS HERE
    await Contact.updateOne({_id: req.body.contactId}, {$push: {relations: newRelation}})


    return res.status(200).json({ error: false });
  } catch (error) {
    console.error("Error:", error);
    return res.status(500).json({ error: true, message: "Internal server error" });
  }
}

在服务器代码中,所有的body参数都是字符串。

node.js mongodb mongoose
1个回答
0
投票

问题是我更新了以前的schama:

const ContactSchema = new Schema(
  {
    ...
    relations: [{
      contact: {
        type: Schema.Types.ObjectId,
        ref: 'Contact'
      },
      title: String
    }],
    ...
  },
  {
    timestamps: true
  }
)

我正在使用一个已经制作好的实例。我试图推送一个对象,但该实例需要一个 objectId。

© www.soinside.com 2019 - 2024. All rights reserved.