Как правильно управлять голосами в приложении для голосования? - PullRequest
0 голосов
/ 18 октября 2018

Я создаю приложение для голосования, используя стек MERN.Я использую мангуст и экспресс для базы данных и бэк-энда.

Это моя схема Мангуста:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

    //create a schema
    const CarrozaSchema = Schema({
      nombre: {
        type: String
      },
      curso: {
        type: String
      },
      votos: Number
    });

    module.exports = Carroza = mongoose.model("carroza", CarrozaSchema);

, и это маршрут, который управляет голосованием:

const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");

//Carroza model
const Carroza = require("../../models/Carroza");

// @route   POST api/votos
// @desc    Realizar el voto
// @access  public
router.post("/", (req, res) => {
  Carroza.findOne({ nombre: req.body.nombre })
    .then(carroza => {
      if (!carroza) {
        return res.status(404).json(req.body);
      }

      carroza.votos = carroza.votos + 1; //Here is where the votes are update
      carroza.save();
      res.status(200).json(req.body);
    })
    .catch(err => res.status(404).json(err));
});

module.exports = router;

В клиентской части есть списокиз "carrozas" с кнопкой, чтобы добавить голосование на тот, который они выбирают. это то, что видит пользователь Проблема в том, что если два пользователя одновременно голосуют за одну и ту же "морковь", добавляется только один голос.

1 Ответ

0 голосов
/ 18 октября 2018

Хотя я не вижу проблем с этим кодом, но если он не работает, попробуйте mongoose findOneAndUpdate() с $inc.Вот пример:

Carroza.findOneAndUpdate({ nombre: req.body.nombre }, {$inc:{votos:1}}, function(err, result){
    if(err) res.json(err);  // whatever error
    else res.json(result);  // whatever result
})

Это также сократит время запроса, так как код короткий и выполняет один запрос вместо двух.

С такими проблемами обычно сталкиваются в случаевысокого трафика, и решаются с помощью таких технологий, как Redis, RabbitMQ и Kafka.

Надеюсь, это поможет!Дайте мне знать, если это работает.

...