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)
带走:在应用程序级别和路由文件中将特定路由移动到动态路由(带参数的路由)的顶部。
添加回答
举报