Express проблема настройки валидатора - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в Nodejs и пишу API отдыха в nodejs, используя express framework. Теперь я делаю отдельный файл маршрута, файл контроллера и файл проверки. Я просто вызываю маршрут и отправляю данные по запросу почтальона. Теперь проблема в том, что мой формат тела запроса немного отличается от формата библиотеки по умолчанию express -validator.

Тело Post Requets

{
    "data":{
         "local_db_path":"",
         "source_type":"google",
         "source_id":"ChIJTTuarbcFGTkRRJn1sPgP0SU",
         "short_code":"VvsyTY",
         "box_ids":[527],
         "text_content":""
    }
}

Маршрут. js

const PostController = require('./controllers/PostController');
const { createPostRules } = require('./rules/CreatePost');
// create post route
router.post('/post/create-quick-post',createPostRules,PostController.createPost);

Правила проверки js файл

const {check, validationResult} = require('express-validator');
createPostRules = [      
    check('local_db_path').isEmpty().withMessage('Post Key is missing'),
    check('source_type').isEmpty().withMessage('Post source type missing'),
    check('source_type').isIn(['google', 'imdb']).withMessage('Invalid source type missing'),
    check('source_id').isEmpty().withMessage('Post source key missing'),
    check('box_ids').isEmpty().withMessage('Box Information is missing')
];
module.exports = { createPostRules }

Теперь проблема в том, что когда я вызываю маршрут API, эта проверка не работает, потому что я отправляю данные в request.body.data

, есть ли другой способ, как Я могу использовать express валидатор с моей текущей структурой.

1 Ответ

0 голосов
/ 19 марта 2020

Вы всегда можете создать свое собственное промежуточное ПО для express, промежуточное ПО сгладит ваш объект тела

от:

{
    "data":{
         "local_db_path":"",
         "source_type":"google",
         "source_id":"ChIJTTuarbcFGTkRRJn1sPgP0SU",
         "short_code":"VvsyTY",
         "box_ids":[527],
         "text_content":""
    }
}

до:

{
  "local_db_path": "",
  "source_type": "google",
  "source_id": "ChIJTTuarbcFGTkRRJn1sPgP0SU",
  "short_code": "VvsyTY",
  "box_ids": [
    527
  ],
  "text_content": ""
}

Промежуточное программное обеспечение

function flattenBodyData(req, res, next) {
  req.body = req.body.data ? req.body.data : {};
  next();
}

Использование:

router.post(
  '/post/create-quick-post',
  flattenBodyData, // Here, before call createPostRules
  createPostRules, 
  PostController.createPost,
);

Но в следующем обработчике, как PostController.createPost. Если вы хотите получить source_type из тела, синтаксис будет req.body.source_type вместо req.body.data.source_type

У меня есть предложение, если ваше тело сообщения имеет только свойство data, просто "сгладьте" его со стороны клиента.

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