3 回答

TA貢獻1858條經驗 獲得超8個贊
我發現了問題。server.js 文件中有這個:
app.use('/', customers);
app.use('/customers', customers);
app.use('/materials', materials)
app.use('/tickets', tickets)
一旦我擺脫了app.use('/', customers);一切都很好。

TA貢獻1810條經驗 獲得超5個贊
您在處理程序中有錯誤getCustomer。
您不應使用字符串 id 來查找客戶,而必須首先使用mongoose.Types.ObjectId(STRING_ID).
getCustomer: async(req, res, next) => {
try {
const { customerID } = req.params;
const customer= await Customer.findById(mongoose.Types.ObjectId(customerID));
res.status(200).json(customer);
} catch(err) {
next(err);
}
}

TA貢獻2037條經驗 獲得超6個贊
我贊成 OP 的解決方案。為了節省大量時間,我只想解釋為什么這是一個問題以及其他人可以像我一樣注意什么。所以在 OP server.js 中,'/' 出現在其他違反規則列出特定路由的路由之前第一的。意思是,如果在其他路由問題解決后移動了“/”。更重要的是,這個錯誤從何而來?當您調用任何其他路線時,您的應用程序首先調用“/”并使用客戶的路線,同時將路線路徑(即“/客戶”、“/材料”、“/門票”)作為 id 參數傳遞,然后是 mongo正在嘗試將客戶、材料和門票作為客戶集合中的 id。
app.use('/customers', customers);
app.use('/materials', materials)
app.use('/tickets', tickets)
app.use('/', customers);
這將解決 OP 的問題。
就我而言,這是問題所在:
router.get('/', getAllUser);
router.get('/:id', getUserById)
router.get('/facebook', facebookPassport)
router.get('/google', customersPassport);
所以在這里我得到這個錯誤Cast error for value "facebook"/"google" at path "_id" for model User因為最后兩條路線中的字符串,“facebook”和“google”是特定的但永遠不會到達,因為'/:id' 路由將接受 '/' 之后的任何值作為 id。當我這樣重新排列時:
router.get('/', getAllUser);
router.get('/facebook', facebookPassport)
router.get('/google', customersPassport);
router.get('/:id', getUserById)
帶走:在應用程序級別和路由文件中將特定路由移動到動態路由(帶參數的路由)的頂部。
添加回答
舉報