我正在开发一个节点应用程序。在我添加之前,所有的路线似乎都在运行
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);
我似乎找不到这里的问题,任何帮助都将不胜感激。
谢谢
您正在将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,没有使用任何模型,但我得到以下错误: 为什么我会有这种行为?