Установить значения по умолчанию и проверить POST-запрос - PullRequest
0 голосов
/ 27 августа 2018
var requiredKeys = {title: 'string', src: 'string', length: 'number'};
var optionalKeys = {description: 'string', playcount: 'number', ranking: 'number'};
var internalKeys = {id: 'number', timestamp: 'number'};

// routes **********************
videos.route('/')
    .get(function(req, res, next) {
        res.json(store.select(/json/))
        next();
    })
    .post(function(req, res, next) {
        res.json(store.insert(/json/, {
            description: req.body.description,
            src: req.body.src,
            length: req.body.length,
            playcount: req.body.playcount,            
            ranking: req.body.ranking,
            timestamp: "00:00:00"
        }))
        next()
    })

Как я могу установить эти переменные как значения по умолчанию, если поле пусто или не указано в запросе POST. Кроме того, как правильно проверить их, прежде чем поместить их в свою БД с помощью store.insert ()?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете использовать библиотеку Joi - чтобы добавить ее, просто наберите: yarn add joi. Joi проверит Ваши данные (в этом случае req.body) по схеме (в этом случае postSchema). В схеме можно использовать default(...), что позволит указать значения по умолчанию для полей (в случае, если title отсутствует, добавится title, заполненное значением: default value. В методе маршрута router.route(...).post(...) Вы просто вызываете Joi.validate(data, schema) и ждете результата.

Вот пример кода:

const Joi = require('joi')
const router = require('express').Router();

const postSchema = {
  title: Joi.string().default('default value'),
  src: Joi.string().default('default src'),
  length: Joi.number().integer().default(0),
}

router.route('/')
  .post(async (req, res) => {
    try {
      const schemaValidationResult = await Joi.validate(req.body, postSchema);
      console.log(`schema is valid ${JSON.stringify(schemaValidationResult)}`);
      const { src, title, length } = schemaValidationResult;
      return res.status(200).send({ src, title, length });
    } catch (error) {
      console.error(`schema is not valid ${error}`);
      return res.status(422).send(error);
    }
  });

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