我正在开发一个节点应用程序。所有路线似乎都有效,直到我添加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
您在读取时就不会遇到错误。
添加回答
举报
0/150
提交
取消