我不明白为什么它要查找 ID 而不是视图
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>
这是错误
"GET /celebrities/new - - 毫秒 - -
...检索时出错.. CastError:对于模型“Celeb”的路径“_id”处的值“new”,转换为 ObjectId 失败
在 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',...
代码 上方。
我正试图到达某条路线,其中包含一个表格,但由于某种原因它正在寻找一个 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>
这是错误
"GET /celebrities/new - - 毫秒 - -
...检索时出错.. CastError:对于模型“Celeb”的路径“_id”处的值“new”,转换为 ObjectId 失败 在 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',...
代码 上方。