有人帮我解决这个错误:无法设置未定义的属性“类型”。在我的架构 discord.js

Posted

技术标签:

【中文标题】有人帮我解决这个错误:无法设置未定义的属性“类型”。在我的架构 discord.js【英文标题】:Someone help me with this error: Cannot set property 'type' of undefined. In my schema discord.js 【发布时间】:2021-08-19 04:53:28 【问题描述】:

我需要帮助解决这个问题。 如果我在我的数据库中的 $guaranteedTier 中输入 2大于 2,我会收到此错误“不能设置未定义的属性'type'。 但如果是$guaranteedTier中的1,则正常工作。 错误在 112 行:cardToAdd.type = 'character'; 能告诉我我做错了什么,我能做些什么来解决这个问题?

我的架构:

const  model, Schema  = require('mongoose');
const Probability = require('probability-node');
const _ = require('lodash');

const cardPackSchema = new Schema(
    name: 
        type: String,
        unique: true
    ,
    description: String,
    cards: Number, //Número de cartas dentro desse pack
    type: String, //Se é um Personagem, Feitiço, Item, Todos
    tier: Number,
    probability: 
        //Probabilidade de pegar cartas de especifico tier
        1: Number,
        2: Number,
        3: Number,
        4: Number,
        5: Number,
    ,
    price: Number,
    discount: Number, //Desconto em porcentagem %
    stock: Number, // -1 é infinito no estoque
    guaranteedTier: Number //Se refere ao tier da descriçao do pack
);

cardPackSchema.methods.purchase = async function(memberID) 
    //->Initialization
    const profile = await this.model('Profile')
      .findOne( memberID )
      .exec();
  
    //->Validation
    if (this.stock === 0)
      return 
        res: 'err',
        title: 'Not available',
        desc: 'The pack you are trying to purchase is out of stock'
      ;
  
    if (profile.coins < this.price - this.price * this.discount)
      return 
        res: 'err',
        title: 'Insufficient Coins',
        desc: 'You do not have sufficient coins to purchase this pack'
      ;
  
    //->Purchasing
    const cards = []; //Cards to give to the player;
  
    //-> Adding Guaranteed tier card
    if (this.guaranteedTier > 1) 
      addCard.call(this, this.guaranteedTier);
      this.cards--;
    
  
    //->Probabilitized function
    const addRandomCard = new Probability(
      
        p: this.probability['1'],
        f: () => addCard.call(this, 1)
      ,
      
        p: this.probability['2'],
        f: () => addCard.call(this, 2)
      ,
      
        p: this.probability['3'],
        f: () => addCard.call(this, 3)
      ,
      
        p: this.probability['4'],
        f: () => addCard.call(this, 4)
      ,
      
        p: this.probability['5'],
        f: () => addCard.call(this, 5)
      
    );
  
    //-> Adding the rest of the cards
    for (var i = 1 + cards.length; i <= this.cards; i++) 
      await addRandomCard();
    
  
    //->Add Cards to inventory
    const deck = await this.model('Deck')
      .findOne( memberID )
      .exec();
  
    profile.deductCoins(this.price - this.price * this.discount);
  
    await deck.addCards(cards);
    //->Return card names
    return 
      res: 'success',
      cards,
      coins: profile.coins - (this.price - this.price * this.discount)
    ;
  
    //->Add Card function
    async function addCard(tier) 
      const randomTypeCard = Math.floor(Math.random() * 1) + 1;
  
      //Adding a Character card
      if (
        (randomTypeCard === 1 && this.type === 'all') ||
        this.type === 'character'
      ) 
        const cardToAdd = _.sample(await model('Character').find( tier ));
        cardToAdd.type = 'character';
        if (
          !_.includes(cards.map(card => card.name), cardToAdd.name) ||
          cardToAdd.sold >= cardToAdd.stock
        ) 
          await cardToAdd.sell();
          cards.push(cardToAdd);
         else addCard.call(this, tier);
      
    


;

model('CardPack', cardPackSchema);

【问题讨论】:

【参考方案1】:

很可能是cardToAdd.type

你确定 cardToAdd 不是 undefined 吗? 我认为这条线什么也没返回:

const cardToAdd = _.sample(await model('Character').find( tier ));

这意味着这段代码可能什么也不返回:

await model('Character').find( tier )

【讨论】:

$guaranteedTier 大于 1 时才显示错误

以上是关于有人帮我解决这个错误:无法设置未定义的属性“类型”。在我的架构 discord.js的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法设置未定义的属性(设置“isSubcon”)

我该如何解决这个问题:未捕获的类型错误:无法读取 javascript 中未定义的属性“toString”

如何解决“未捕获的类型错误:无法读取未定义的属性'参数'”reactjs + django

错误(索引):74 未捕获的类型错误:无法设置未定义的属性“cmd”

未捕获的类型错误:无法读取未定义的属性“顶部”

datatables jquery - 未捕获的类型错误:无法读取未定义的属性“显示”