当前位置: 首页 > 知识库问答 >
问题:

NodeJS:CastError:model“Client”的路径“\u id”处的值“new”转换为ObjectId失败

满博
2023-03-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)未经处理的PromisejectionWarning:CastError:在模型“Client”的路径“\u 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个答案

曹凯泽
2023-03-14

您正在将app.get('/客户端/new')转换为path/客户端/: id,因此在您的控制器中,req.params.id值是new

然后您正在执行const Client=wait Client.findById(req.params.id);

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

mongo中的ObjectId具有特定格式,无法强制转换“new”。这就是引发异常的原因。

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

如果你想有一个带"new"的路径,你可以创建一个像这样的新路径:

app。获取('/clients/new/:id')

并在路径客户端/new/YOUR_ID发送id。

其他选项是不调用带有new的路径。直接调用/客户端/YOUR_ID

但是请记住发送一个有效的ObectId格式,所以当您读取req时。params。id您将不会遇到此错误。

检查文档以了解ObjectId的工作原理。

 类似资料:
  • 我正在尝试用mongodb和nodejs制作一个应用程序。我做了一个特殊的路由,它有参数,并且运行良好。 我还做了另一个get路线,它有。每次我收到该错误时向该路由发送请求时: 我的路线是: 当我向上面的路由发出get请求时,我得到了该错误: 我的产品模型是: 我怎样才能解决这个问题?

  • 我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助。 我创建了一个简单的、以猫为主题的示例来重现我遇到的错误。我基本上是通过ObjectId检索一个对象。我正在使用创建对象时自动生成的对象id(作为字符串)。 当我导航到路径localhost:3000/kitty/586d62878fc14d30e0ac

  • 好吧,我看到这里有一些这样的帖子,但他们没有帮助我。。。 让我描述一下我的问题: 我有两个模式 现在我已经有了一个B对象,我想创建一个a对象。 所以我这样做: b对象是从我的monogDB加载的。调试器为我的b显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDáb)。 但是,当我保存新的A-Object时,会出现错误:“CastError:Cast

  • 我的应用程序可以在本地工作,但在生产中,我似乎无法使用猫鼬从mongo获取特定的东西。我尝试过:

  • 我试图在一个MEAN堆栈应用程序中处理一个计划。当我调用findOne时,我得到了这个错误: 我就是这样做的: 我注意到,当我把id作为一个字符串(如下所示)时,一切正常。 所以,我控制台: 我一直在尝试我在这里找到的东西,但任何东西都可以帮助我解决这个问题:/

  • 我的控制器obter_todos_precos只是一个console.log,没有使用任何模型,但我得到以下错误: 为什么我会有这种行为?