将路由参数传递给Mongoose Query Express

时间:2018-02-17 19:29:14

标签: node.js

基本上,我试图找到一种方法来找到将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留言板,并且我已经尝试找到有关将路由参数传递给查询查询的任何教程,唉,没有。< / p>

这是我的代码:

我的架构和模型:

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)时,它会返回很多对象,因为我使用了#34; Forest&#34;和Magic:The Gathering card 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 个答案:

答案 0 :(得分:1)

find()返回一个数组,表示cardstatsok是一个数组。

所以console.log(cardstatsok.cardName)无效。使用console.log(cardstatsok[0].cardName)代替第一张卡,或console.log(cardstatsok)代替所有内容。如果要打印所有卡名称,则必须在阵列上循环。

要查找只有一张卡,您可以使用findOne()代替。