В основном я пытаюсь найти способ включить req.params.name в запрос find().

Я пытался:

Попытка передать мою переменную req.params в моем find() параметре объекта Card.find({cardName: req.params.name}, callback) и любые другие возможные отклонения от этого.

Я пробовал статический метод для findByName, в котором я только что сделал Card.findByName(req.params.name, callback);

Когда я делаю console.lo(req.params.name), он возвращает имя карты; однако, когда мне нужно show.ejs, я делаю console.log(cardstatsok.cardName), он возвращается неопределенным.

Я искал здесь на Stack Overflow, я проверил свою доску сообщений Udemy, и я попытался найти какой-либо учебник по передаче параметров маршрута в поисковый запрос, но, увы, ничего.

Вот мой код:

Моя схема и модель:

var cardSchema = new mongoose.Schema({
    cardName: String,
    id: Number,
    cardSet: String,
    image: String,
    ability: String
});

var Card = mongoose.model("Card", cardSchema);

Мой маршрут для моей страницы с одной карточкой:

app.get("/cards/:name", function(req, res) {
    Card.find({"cardName":req.params.name}, function(err, cardInfo){
       if(err){
           res.redirect("/cards");
           console.log(err);
       } else {
           res.render("show", {cardstatsok: cardInfo});
       }
    });
});

Когда я делаю console.log(cardInfo), он возвращает много объектов, так как я использовал "Лес", а копия карты Magic: The Gathering Forest была напечатана много раз. Но вот один из них:

  { _id: 5a85bb554c8fff0c04f15b8e,
    cardName: 'Forest',
    id: 243461,
    cardSet: 'Duel Decks: Knights vs. Dragons',
    image: 'http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=243461&type=card',
    __v: 0 }
1
Thomas Hutton 17 Фев 2018 в 22:29

1 ответ

Лучший ответ

find() возвращает массив, что означает, что cardstatsok является массивом.

Так что console.log(cardstatsok.cardName) не сработает. Вместо этого используйте console.log(cardstatsok[0].cardName) для первой карты или console.log(cardstatsok) для всего. Если вы хотите напечатать все имена карт, вам нужно перебрать массив.

Чтобы найти только одну карту, вы можете использовать вместо нее findOne().

1
Mika Sundland 17 Фев 2018 в 23:30