Проверить перед выполнением запроса - PullRequest
0 голосов
/ 09 июля 2020

У меня есть «модель продукта» и конечная точка, где пользователь запрашивает продукты. Как обычно, пользователь может отправлять поля в строке запроса для фильтрации результатов, но если пользователь отправляет поле с недопустимым типом, например слово в числовом c пути, проверка завершается неудачно и выдает ошибку CastError как ожидается.

const ProductModel = require('../models/Product');

app.get("/products", async (req, res, next) => {
    // user sends {upc: "word"} when upc should be a number, therefore validation fails
    const products = await ProducstModel.find(req.qury);
})

Проблема: есть ли способ проверить запрос на соответствие модели / схеме? Так что возникнет ошибка валидации. Почему я хочу это сделать? При создании документа, если проверка завершается неудачно, выдается ValidationError, в котором есть все ошибки, поэтому я могу ответить пользователю с его помощью. С другой стороны, CastError выдается при первой найденной ошибке.

ValidationError: "Product validation failed: upc: Cast to Number failed for value \"word\" at path \"upc\""

CastError: Cast to ObjectId failed for value "a" at path "width" for model "Product"

1 Ответ

0 голосов
/ 09 июля 2020

Просто идея: вы можете использовать schema.path и проверять каждое поле в al oop или переключаться в зависимости от того, что вам подходит, и совпадать с вашим req data typeof s

, например:

const mySchema = new Schema({ name: String })
mySchema.path('name').instance //this would result to "String"

другой вариант - использовать validator например:

var schema = new Schema({
    name: String
})

затем:

schema.path('name').validate(function (v) {
  return typeof v == 'String';
}, 'my error '); 

Надеюсь, это как-то поможет.

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