#node.js #mongodb #mongoose
#node.js #mongodb #мангуст
Вопрос:
Рассматриваемый стек: узел, EJS, Монго, Мангуст
Моя маршрутизация была настроена так:
app.get('/products', async (req,res) => {
const products= await Product.find({});
res.render('products/index', {products});
})
app.get('/products/:id', async (req,res) =>{
const {id} = req.params;
const product = await Product.findById(id);
res.render('products/show', {product});
})
app.get('/products/new', (req,res)=>{
res.render('products/new');
})
И я получал эту ошибку:
CastError: Cast to ObjectId failed for value "new" at path "_id" for model "Product"
И в конце концов я исправил ошибку, переместив /new route над маршрутом /:id .
Мой вопрос: почему это исправило? Я не вызывал {id} в /новом маршруте. Маршрут /new не вызывал ничего, кроме моего файла EJS в res.render. Я не могу найти в Интернете какую-либо причину, по которой перемещение маршрута выше в коде устранило проблему.
Ответ №1:
Когда ваш маршрут ‘app.get(‘/ products/: id’)’ определен выше, он рассматривает каждое значение после ‘/ products/’ как параметр id. Например, если вы вызываете маршрут ‘/ products / new’, маршрут app.get (‘/ products/: id’) перехватит запрос, думая, что значение параметра id равно ‘new’, и начнет обработку запроса, не позволяя ему достичь намеченного места.
Но если вы определите маршрут «app.get (‘/ products / new’)» перед маршрутом «app.get (‘/ products/: id’)», он перехватит любой запрос, предназначенный для маршрута «/ products / new», и оставит запросы, содержащие параметры идентификатора.
Комментарии:
1. И теперь все это имеет смысл. Спасибо!
2. Рад помочь!!