亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號