Экспресс-валидатор не хочет найти дубликаты в базе данных - PullRequest
0 голосов
/ 23 апреля 2019

Я использую Express-Validator для проверки моих полей в формах спереди, но функция exists() не работает.

У меня есть другая форма (форма регистрации), где я использую EV (Express-Validator), и в этом случае все в порядке, я делаю то же самое со второй формой, и здесь она не работает.

game.js (маршрутизация)

const app = require('express')();
const gameController = require('../controllers/gameController');
const { check } = require('express-validator/check');

module.exports = () => {
  app.post('/add', [
    check('title').exists().withMessage('The PBF Game with this title is actually in database'),
    check('link').exists().withMessage('The PBF Game with this website link is actually in database')
  ], gameController.addGame);

  return app;
}

gameController.js

const db = require('../models');
const { validationResult } = require('express-validator/check');

const validation = {
  size: 40960,
  type: 'image/png'
}

const path = 'uploads/';

module.exports = {
  addGame(req, res, next) {
    const { title, link, description } = req.body;
    const errors = validationResult(req);

    if (!errors.isEmpty()) {
      return res.status(400).json({ status: res.statusCode, message: errors.array() });
    } else if (req.files.icon.size > validation.size) {
      return res.status(400).json({ status: res.statusCode, message: [{ 'msg': 'Your file has more than 50KB!' }] });
    } else if (req.files.icon.mimetype !== validation.type) {
      return res.status(400).json({ status: res.statusCode, message: [{ 'msg': 'You can upload only PNG files!' }] });
    } else {
      let file = req.files.icon;

      file.mv(path + new Date().getTime() + '-' + file.name, err => {
        if (err) {
          return res.status(400).json({ message: [{ 'msg': err }] });
        }

        db.game.create({ title: title, link: link, icon: path + file.name, description: description, flag: false });
        return res.status(200).json({ status: res.statusCode, message: 'The game has been added for verification. It should briefly appear in the selection field in the profile. If not, it means that the administrator has not approved the request.' });
      });
    }
  }
}

Express-Validator не проверяет наличие значения в базе данных и передает пустой массив контроллеру, где я проверяю файл и пытаюсь вернуть правильный ответ. Пользователь получает ответ об успешном выполнении (если файл правильный), но на консоли моего сервера отображается красное предупреждение о «ошибке проверки», и никакое значение не заносится в базу данных, но, как я уже говорил, пользователь получает ответ об успешном завершении. Где проблема?

1 Ответ

2 голосов
/ 23 апреля 2019

Экспресс валидатор может проверять только запросы. НЕ МОЖЕТ проверить, если значение уже присутствует в базе данных. Для этого вам нужно запросить базу данных и проверить.

Например, проверка check('title').exists() проверит, присутствует ли в запросе поле title, а НЕ в базе данных.

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