NodeJS Express проверка вложенного объекта ввода - PullRequest
0 голосов
/ 23 января 2019

У меня возникли проблемы с проверкой тела запроса вложенного объекта с помощью пакета "express-validator". Допустим, у нас есть метод для сбора пользовательского ввода с таким телом:

{
    "general": {
        "sessionId": "a2957207-e033-49e7-b9da-1c5f946a1074",
        "os": "android",
        "vendor": "htc"
    },
    "data": [
        {
            "target": "logPageVisits",
            "pageName": "users/packages",
            "engagementTime": 350
        }
    ]
}

Экспресс-валидатор предлагает только валидацию следующим образом:

req.checkBody('engagementTime')
        .notEmpty()
        .withMessage('Engagement-Time is required')

Кажется, не существует чистого способа проверки вложенных объектов, подобных этому:

req.checkBody('data.engagementTime')
        .notEmpty()
        .withMessage('Engagement-Time is required')

Я нашел закрытую проблему на Github ! но это не отвечает моим интересам!

Есть предложения получше?

1 Ответ

0 голосов
/ 23 января 2019

Вы всегда можете создать свое собственное связующее ПО для экспресс.
Например, в вашем случае, очень упрощенно это будет выглядеть так:

const checkNestedBodyMiddleware = (req, res, next) => {
  const { data } = req.body;

  // As I see, here is array in data, so we use simple find
  const engTimeInArr = data.find(d => d.engagementTime);

  if(!engTimeInArr){
    return res.status(400).send('Engagement-Time is required');
  }

  next();
}

И затем использовать егов вашем маршруте:

app.post('/some-route', checkNestedBodyMiddleware, (req, res) => {
   // your route logic here.
})

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

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