#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. Просто измените ^ на ~ там. Это решит проблему.