大家早上好
我陷入了这个问题,找不到解决方法。我认为确实很容易,但是我找不到错误。我只是想用express创建3条路线来获取所有活动的锦标赛,只有一条通过参数选择,最后3条用于主页。 为此,我创建了三个获取以在控制器中获取具有不同功能的数据。但是,如果我尝试使用路由“ / activetournament”的邮递员获取数据,则会收到此错误。删除它的唯一方法是另外2条评论。谢谢您的回答。
(node:17203) UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "activetournaments" at path "_id" for model "Tournament"
const tournamentsCtrl = {};
const Tournaments = require("../models/Tournaments");
tournamentsCtrl.createTournament = async (req, res) => {
console.log(req.body);
const newTournament = new Tournaments(req.body);
await newTournament.save();
res.json({ message: "Tournament Saved" });
}
tournamentsCtrl.getTournament = async (req, res) => {
const tournament = await Tournaments.findById(req.params.id);
res.json(tournament);
}
tournamentsCtrl.homeTournament = async (req, res) => {
const tournament = await Tournaments.find().sort({ _id: 1 }).limit(3);
res.json(tournament);
}
tournamentsCtrl.actTournament = async (req, res) => {
const tournament = await Tournaments.find({ "signup_dates.signup_end_date": { $gt: new Date() } });
res.json(tournament);
}
module.exports = tournamentsCtrl;
const router = require("express").Router(); // Enrutador
const tournamentsCtrl = require('../controllers/tournaments.controller');
const auth = require('../middleware/auth');
//Create tournaments
//api/tournaments
router.post('/', tournamentsCtrl.createTournament);
router.get('/activetournaments', tournamentsCtrl.actTournament);
router.get('/:id', tournamentsCtrl.getTournament);
router.get('/', tournamentsCtrl.homeTournament);
module.exports = router;
答案 0 :(得分:1)
观察控制器和路由代码后,我发现问题出在哪里。
router.get('/activetournaments', tournamentsCtrl.actTournament);
router.get('/:id', tournamentsCtrl.getTournament);
对于express.js,以上两条路由的工作原理相同,在第二条路由中,它代替:id
并考虑activetournaments
,并继续进行。因此,当您点击API /activetournaments
时,它将调用两条路由
activetournaments
。
router.get('/activetournaments', tournamentsCtrl.actTournament);
router.get('/tournamentById', tournamentsCtrl.getTournament);