簡體   English   中英

我不明白為什么它在尋找 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>

這是錯誤

“獲取/名人/新 - - 毫秒 - -

...檢索出錯.. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM