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

我正在开发一个节点应用程序。所有路线似乎都有效,直到我添加


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);

我似乎在这里找不到问题,任何帮助将不胜感激。


RISEBY
浏览 130回答 1
1回答

qq_笑_17

您正在执行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您在读取时就不会遇到错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript