сохранение документа, несмотря на неверный тип ввода - PullRequest
1 голос
/ 19 июня 2020

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

вот моя схема

const userSchema = new Schema(
  {
    firstName: String,
    lastName: String,
  },
  {
    collection: "Users",
  }
);

const User = model("User", userSchema);

и моя функция

async function addUser({ firstName, lastName }) {
  try {
    const newUser = new User({
      firstName: await firstName,
      lastName: await lastName,
    });

    await newUser.save();

    console.log(`${firstName} ${lastName} has registered.`);
  } catch (error) {
    throw console.error(error);
  }
}

вот как я вызываю addUser

router.post("/register", async (req, res) => {
  try {
    const firstName = await req.body.firstName;
    const lastName = await req.body.lastName;

    console.log(typeof firstName);
    console.log(typeof lastName);

    addUser({ firstName, lastName });

    res.json({
      firstName,
      lastName,
    });
  } catch (error) {
    throw console.error(error);
  }
});

вот мой последний запрос почтальона

{
    "firstName": 1234,
    "lastName": "test",
    "email": "someemail@gmail.com",
    "password": "abcd1234"
}

1 Ответ

2 голосов
/ 19 июня 2020

Из документации :

Если вы передадите элемент с функцией toString (), Mon goose вызовет его, если только этот элемент не является массивом или функция toString () строго равна Object.prototype.toString ().

Поскольку тип JavaScript s number предоставляет toString(), это вызывается, значение преобразуется в string, и ошибки проверки не будет.

Обратите внимание, что вы можете использовать настраиваемый валидатор, чтобы предотвратить поведение и выдать ошибку, если тип не является строкой:

const userSchema = new Schema({
  firstname: {
    type: String,
    validate: {
      validator: value => typeof value === 'string',        
      message: props => `${props.value} is not of type string!`
    }
  }, ...

Также обратите внимание, что вам следует избавиться от ненужного awaits, поскольку в этих случаях вы не ожидаете обещания. Вы можете просто сделать:

const firstName = req.body.firstName;
const lastName = req.body.lastName; 

и

 const newUser = new User({ firstName, lastName });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...