【发布时间】:2021-11-11 23:10:15
【问题描述】:
我有一个架构,我希望用户名字段是唯一的,但它不起作用(“必需”正常工作)。我所做的尝试:重新启动 mongodb,删除数据库。我可以知道我错过了什么吗?
这是我的架构:
import mongoose, { HookNextFunction, model } from 'mongoose';
import bcrypt from 'bcrypt';
import { AdminDocument } from '../interfaces';
const AdminSchema = new mongoose.Schema(
{
username: { type: String, unique: true, required: true },
email: { type: String, unique: true, required: true },
password: { type: String, required: true },
role: { type: Number, enum: [0, 1], required: true },
address: { type: String },
phone: { type: String, required: true },
photo: { type: String, default: null },
name: { type: String, required: true },
gender: { type: Number, enum: [0, 1, 2], required: true },
refreshToken: { type: String, default: null },
},
{ timestamps: true }
);
AdminSchema.pre('save', async function (next: HookNextFunction) {
let user = this as AdminDocument;
if (!user.isModified('password')) {
return next();
}
const salt = await bcrypt.genSalt(Number(process.env.SALT_WORK_FACTOR));
const hashedPassword = await bcrypt.hash(user.password, salt);
user.password = hashedPassword;
return next();
});
AdminSchema.methods.comparePassword = async function (
candidatePassword: string
) {
const user = this as AdminDocument;
const isValid = await bcrypt.compare(candidatePassword, user.password);
return isValid;
};
export default model<AdminDocument>('Admin', AdminSchema);
【问题讨论】:
标签: node.js typescript mongoose