Мангуст: свойство «методы» не существует для типа «Схема». Вы имели в виду «метод»?

#node.js #mongoose

#node.js #мангуст

Вопрос:

Внезапно мой код начал выдавать ошибки, касающиеся методов в схеме мангуста.

У меня есть следующий документ и схема

 import mongoose from 'mongoose';
import bcrypt from 'bcrypt';

interface UserDoc extends mongoose.Document {
    firstName: string,
    lastName: string,
    email: string,
    password: string,
    domainId: mongoose.Types.ObjectId,
    scope: string,
    tc: boolean,
    newsletter: boolean
}

const userSchema = new mongoose.Schema({
    firstName: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    domainId: {
        type: mongoose.Types.ObjectId,
        ref: 'Domain',
        required: true
    },
    scope: {
        type: UserScopes,
        required: true
    },
    verified: {
        type: Boolean,
        default: false
    },
    tc: {
        type: Boolean,
        default: false
    },
    newsletter: {
        type: Boolean,
        default: false
    }
}, {
    timestamps: true,
    strict: true
});

userSchema.methods.toJSON = function () {
    var object = this.toObject();
    delete object.password;
    delete object.__v;

    object.id = object._id;
    delete object._id;

    return object;
}

userSchema.pre('save', async function(next) {
    const salt = await bcrypt.genSalt();
    const hashedPassword = await bcrypt.hash(this.get('password'), salt);
    
    this.set('password', hashedPassword);

    next();
});

userSchema.methods.comparePasswords = async function (triedPassword: string, savedPassword: string) {
    const result = await bcrypt.compare(triedPassword, savedPassword);
    return resu<
}

userSchema.index({
    email: 1,
    domainId: 1
}, { unique: true });

const User = mongoose.model<UserDoc>('User', userSchema);

export { User }; 

Час назад все работало нормально, но после перезапуска кода я получаю следующие ошибки:

 src/models/user.ts(55,4): error TS2554: Expected 0-1 arguments, but got 2.
  => This relates to timestamps and strict settings.

src/models/user.ts(60,12): error TS2551: Property 'methods' does not exist on type 'Schema'. Did you mean 'method'?
  => This relates to toJSON method.

src/models/user.ts(77,5): error TS2554: Expected 1 arguments, but got 0.
  => This relates to the call made to next inside pre('save').

src/models/user.ts(80,12): error TS2551: Property 'methods' does not exist on type 'Schema'. Did you mean 'method'?
  => This relates to comparePasswords method. 

Я понятия не имею, что вызывает проблему.

ПРИМЕЧАНИЕ: я запускаю приложение с помощью Docker, и я также пробовал компилировать с более старой версией mongoose, а также с последней версией.

Ответ №1:

Сегодня мангуст выпустил новую версию и удалил многие функции. Я предлагаю использовать более старую версию mongoose. Пожалуйста, поделитесь package.json, чтобы я мог указать версию.

Комментарии:

1. если я понизлю mongoose на несколько версий, он проснется, но это кажется таким странным, потому что в документации к новейшим версиям похоже, что он должен работать, ничего не нарушая, как сейчас.

2. Нет необходимости понижать версию. Просто упомяните «мангуст»: «~ 5.x.xx» в вашем package.json. Просто измените ^ на ~ там. Это решит проблему.