为了账号安全,请及时绑定邮箱和手机立即绑定

NodeJS:CastError:模型“Client”的路径“_id”处的值“new”

NodeJS:CastError:模型“Client”的路径“_id”处的值“new”

RISEBY 2023-08-24 10:29:14
我正在开发一个节点应用程序。所有路线似乎都有效,直到我添加app.get('/clients/:id',async (req, res) => {    const client = await Client.findById(req.params.id);    res.render('clients/show', {client});});当我注释掉 id 路由时,新路由将按预期工作。但是当它在那里时,我尝试点击“新路线”:app.get('/clients/new', (req, res) => {    res.render('clients/new')});我收到以下错误:(节点:17216)UnhandledPromiseRejectionWarning:CastError:对于模型“Client”的路径“_id”处的值“new”,转换为 ObjectId 失败这是我的架构:    const mongoose = require('mongoose');    const { Schema } = mongoose;    const ClientSchema = new Schema({    company: String,    contact: String,    phone: Number,    email: String,    city: String,    state: String,    zip: Number,    accounts: [        {            type: Schema.Types.ObjectId,            ref: 'Account',        },    ]    });    module.exports = mongoose.model('Client', ClientSchema);我似乎在这里找不到问题,任何帮助将不胜感激。
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您正在执行app.get('/clients/new')into path /clients/:id,因此在您的控制器中,req.params.id值是new

那么你正在做的const client = await Client.findById(req.params.id);

也就是说:您正在尝试查找 _id 为“new”的文档。

ObjectId在 mongo 中有一个特定的格式,“new”不能被转换。这就是抛出异常的原因。

要解决这个问题,您有两种选择。修改路径或修改您将发送的值。

如果你想要一条带有“new”的路径,你可以创建一条新路线,如下所示:

app.get('/clients/new/:id')

并在 path 处发送 id clients/new/YOUR_ID

其他选项不调用带有 的路径new。直接打电话/clients/YOUR_ID

但请记住发送有效的 ObectId 格式,这样req.params.id您在读取时就不会遇到错误。

查看完整回答
反对 回复 2023-08-24
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信