Intentando agregar impuestos a un usuario usando 3 parámetros de Usuario, original y porcentaje. Los esquemas se definen a continuación, así como la llamada de la función.
const usertaxschema = require('./schemas/usertaxschema') const maintaxschema = require('./schemas/maintaxschema') const taxedamount = ((percent/100)*original).toFixed(0) const data = await usertaxschema.findOne({User:User}) if(!data) { const newSchema = new usertaxschema({ User:User, TaxesPaidInTotal:0, TakesPaidThisPeriod:0, }) await newSchema.save().catch((err) => console.log(err)) return 0 } const chubster = await maintaxschema.findOne({Taxes:'Main'}) chubster.TotalTaxesPaid +=taxedamount chubster.taxesavailable += taxedamount data.TotalTaxesPaid +=taxedamount data.TimePeriod += taxedamount await chubster.save() await data.save() return taxedamount }UserTaxSchema
const mongoose = require('mongoose') const usertaxschema = mongoose.Schema({ User:String, TaxesPaidInTotal:Number, TimePeriod:Number, }) module.exports = mongoose.model('usertaxes', usertaxschema, 'usertaxes')Esquema fiscal principal
const mongoose = require('mongoose') const maintaxschema = mongoose.Schema({ Taxes:String, //Main etc TotalTaxesAllTime:Number, TaxesCollectedThisPeriod:Number, TaxesInBalance:Number, }) module.exports = mongoose.model('maintaxes', maintaxschema, 'maintaxes')Ejemplo de función de llamada
const fatso = await Client.economy.taxUser(interaction.user.id, 500, 11.5) console.log(fatso)Number.toFixed devuelve una String . De ahí viene "58" . Luego, "agrega" (concatena) la String "58" a varias propiedades que deberían almacenar números, pero parece que la propiedad TimePeriod no está undefined , por lo que concatena undefined y "58" y obtiene el valor "undefined58" .
Tienes que arreglar dos cosas:
undefined antes de agregarlasPara resolver #1, esta línea
const taxedamount = ((percent/100)*original).toFixed(0) debe usar Math.round en lugar de .toFixed , porque Math.round devuelve un número, mientras que .toFixed devuelve una cadena.
const taxedamount = Math.round(percent / 100 * original) Para resolver el n. ° 2, debe verificar si no está undefined (tal vez incluso si es null , si ese también es un valor posible) antes de agregar valores. Pero, ¿está seguro de que debería agregar una "cantidad sujeta a impuestos" a un "período de tiempo"?
Bueno, de todos modos, si eso es lo que quiere hacer, y si desea agregar la cantidad, incluso si el valor actual de la propiedad no está undefined (o es null ), puede establecer el valor predeterminado en 0 antes de agregar
data.TimePeriod = (data.TimePeriod || 0) + taxedamount Debe hacer eso para todas las propiedades que pueden contener undefined (o null ) para no obtener un valor NaN (no un número).