[英]I don't understand why it's looking for an ID instead of a view
我試圖獲得一條包含表單的特定路線,但由於某種原因它正在尋找一個ID。 我將分享我的路線,我的觀點和錯誤。
//celebrities routes
const express = require('express');
const router = express.Router();
const Celeb = require('../model/celebrity.model')
router.get('/celebrities', (req, res) => {
Celeb.find()
.then(AlltheModels => {
console.log(AlltheModels)
res.render('celebrities/index', { celebs: AlltheModels })
})
.catch(error => console.log('error while getting the celebrities', error))
})
router.get('/celebrities/:id', (req, res) => {
const celebId = req.params.id
console.log(celebId)
Celeb.findById(celebId)
.then(OneCeleb => {
console.log(OneCeleb)
res.render('celebrities/show', { celebOne: OneCeleb })
})
.catch(error => console.log('there was an error by retrieving..', error))
})
//NEW celebrities
router.get('/celebrities/new', (req, res) => {
res.render('celebrities/new')
})
router.post('/celebrities', (req, res) => {
const { name, occupation, catchPhrase } = req.body;
Celeb.create({ name, occupation, catchPhrase })
// .then(CelebNew => {
// CelebNew.save()
// console.log(CelebNew + '...has been entered')
// })
.then(() => res.redirect('/celebrities'))
.catch(error => `There was an error of ${error}`, err)
})
module.exports = router;
這是應該導致表單視圖的視圖
<div>
<a href="/celebrities/new">Create a new Celebrity</a>
</div>
<div>
{{#each celebs}}
<a href="/celebrities/{{_id}}">
<h2>{{this.name}}</h2>
</a>
{{/each}}
</div>
這是錯誤
“獲取/名人/新 - - 毫秒 - -
...檢索出錯.. CastError: Cast to ObjectId failed for value "new" at path "_id" for model.Query.exec (/mnt/c/Users/carlo/documents/ ironhack/labs/lab-mongoose-movies/starter-code/node_modules/mongoose/lib/query.js:4408:21)"
據我了解,問題出在這條路線上
router.get('/celebrities/:id', (req, res) => {
const celebId = req.params.id
console.log(celebId)
Celeb.findById(celebId)
.then(OneCeleb => {
console.log(OneCeleb)
res.render('celebrities/show', { OneCeleb })
})
.catch(error => console.log('there was an error by retrieving..', error))
})
但我不知道錯誤的原因或位置,或者為什么它試圖尋找新的 ID,是車把助手嗎?
您的問題是路徑/celebrities/new
匹配模式/celebrities/:id
。
當您向路徑/celebrities/new
發出 GET 請求時,Express 會按順序查看所有已注冊的路由,試圖找到匹配項。 當 Express 找到注冊的路由/celebrities/:id
時,它認為這是匹配的,因為請求路徑與模式匹配 - 它以 "/celebrities/" 開頭,后跟一個任意字符串值,它解釋為id
參數 ("新的”)。
Express 永遠不會為/celebrities/new
GET 路由提供服務,因為/celebrities/:id
將始終是第一個匹配項。
為了讓 Express 找到/celebrities/new
路由,它必須在/celebrities/:id
路由之前注冊。 您實際上只需將router.get('/celebrities/new'...
代碼router.get('/celebrities/:id',...
代碼上方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.