有人帮我解决这个错误:无法设置未定义的属性“类型”。在我的架构 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