Пн goose приведение к ObjectID не удалось для значения ... но почему - PullRequest
0 голосов
/ 15 февраля 2020

Я знаю, в чем проблема, но не могу понять, почему это происходит. У меня есть простое приложение рецепт, используя express и пн goose. Пользователь передает информацию о рецепте через форму и сохраняется в базе данных с помощью методов mon goose. Эта часть, кажется, работает отлично, и когда я console.log использую тестовые данные, я вижу, что следующие данные сохраняются:

{
  ingredients: [ 'peanut butter', 'jelly', 'bread' ],
  _id: 5e47d564f775ce247052d01c,
  name: 'pb jelly sammich',
  author: 'rob',
  oneLiner: 'classic pb jelly sammich',
  image: 'picofpbsammich here',
  method: 'add all the ingredients together and boom! pb jelly sammich.',
  __v: 0
}

(Это также то, что показывает, когда я проверяю mon go db с использованием db .recipes.find (), а также то, что отображается, когда я передаю объект в мой шаблон показа e js.

Однако, когда я получаю доступ к своему маршруту показа через запрос get, я получаю длинное сообщение об ошибке, используя приведенные выше тестовые данные. Вот они ключевая часть сообщения об ошибке:

'Cast to ObjectId failed for value "picofpbsammich here" at path "_id" for model "Recipes"',

Я понимаю, в чем проблема, но сбит с толку относительно того, почему это происходит. Вот мой маршрут показа:

app.get("/recipes/:id", function (req, res) {
    console.log(req.params.id)
    Recipe.findById(req.params.id, function (err, foundRecipe) {
        if (err) {
            console.log(err);
        } else {
            res.render("show", { recipe: foundRecipe });
        }
    })
})

консоль, регистрирующая req.params.id, как показано выше, печатает следующее:

5e47d564f775ce247052d01c
picofpbsammich here

Первая строка - это правильный идентификатор, вторая, очевидно, нет и причина проблемы, но я понятия не имею, откуда это может исходить: S Почему бы req.params.id вытягивал VALUE свойства, имя которого было бы совершенно другим?

Я новичок в mon goose, поэтому это, наверное, что-то глупое, я дой нг и любые объяснения приветствуются.

Вот модель:

var mongoose = require("mongoose");

let recipeSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    author: String,
    oneLiner: String,
    ingredients: [String],
    image: String,
    method: String
})
module.exports = mongoose.model("Recipes", recipeSchema)

1 Ответ

0 голосов
/ 15 февраля 2020

Вы отправили следующий код:

app.get("/recipes/:id", function (req, res) {
    console.log(req.params.id)
    Recipe.findById(req.params.id, function (err, foundRecipe) {
        if (err) {
            console.log(err);
        } else {
            res.render("show", { recipe: foundRecipe });
        }
    })
})

И вы упомянули, что в файле console.log вы получите:

5e47d564f775ce247052d01c
picofpbsammich here

После чего регистрируется исключение:

'Сбой приведения к ObjectId для значения "picofpbsammich here" по пути "_id" для модели "Рецепты"',

Логично предположить, что вы делаете два запроса, один из идентификатор которого недействителен:

picofpbsammich here

Пн goose не может преобразовать это значение в ObjectId, поэтому вы получаете исключение, которое имеет смысл imo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...