#typescript #express #mongoose
#машинописный текст #экспресс #мангуст
Вопрос:
При попытке найти мою пользовательскую модель я получаю: объект, возможно, «нулевой», если это возможно, я бы предпочел не подавлять строгое правило typescript.
const { email, password } = req.body;
const user = await User.findOne({ email:email });
if (!user) {
}
/// This line causes the error
const passwordMatch = await bcrypt.compare(password, user.password);
////User Interface
import { Document } from 'mongoose';
interface User extends Document {
email: string;
password: string;
username: string;
}
export default User;
////User Schema
import mongoose, { Document, Schema, Model, model } from 'mongoose';
import User from '../interfaces/User';
const UserSchema: Schema = new Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
username: { type: String, required: true },
});
export default mongoose.model<User>('User', UserSchema);
Ответ №1:
Проблема в том, что ваш оператор if if (!user)
не обрабатывает то, что должно произойти, если пользователь имеет значение null / undefined .
Если вы решите вернуться из функции в случае, если пользователь имеет значение null (или не определен) с
if (!user) {
return
}
TypeScript достаточно умен, чтобы понять, что как только вы дойдете до строки соответствия паролю, пользователь никогда не будет null