Mongoose с Typescript: объект может быть пуст - PullRequest
2 голосов
/ 20 апреля 2019

При попытке найти мою модель пользователя я получаю: объект, возможно, 'нулевой' Если возможно, я бы предпочел не подавлять строгое правило машинописи.

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 Ответ

1 голос
/ 20 апреля 2019

Проблема в том, что ваш оператор if if (!user) не обрабатывает то, что должно произойти, если пользователь имеет значение null / undefined.

Если вы решите вернуться из функции, если пользователь имеет значение null (или undefined)) с

if (!user) {
  return
}

TypeScript достаточно умен, чтобы понять, что как только вы попадете в строку passwordMatch, пользователь никогда не будет нулевым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...