How to Build Real-Time Voting Applications With JavaScript

How to Build Real-Time Voting Applications With JavaScript

Building real-time voting applications can be an exciting and rewarding project, especially with the power of JavaScript. In this article, we’ll explore the steps to create a simple yet effective voting application that leverages JavaScript for a responsive user experience.

Why Use JavaScript for Real-Time Applications?

JavaScript is an ideal choice for developing real-time applications due to its non-blocking nature and ability to handle asynchronous events. When paired with WebSocket or libraries like Socket.IO, JavaScript can maintain a persistent connection to the server, allowing instant updates without page refreshes.

Essential Technologies

To build a real-time voting application, you'll need the following technologies:

  • Node.js: A JavaScript runtime that allows you to run JavaScript on the server side.
  • Socket.IO: A library for real-time web applications, facilitating bi-directional communication.
  • Express.js: A web application framework for Node.js, providing a robust set of features for web and mobile applications.
  • MongoDB: A NoSQL database to store votes and results persistently.

Step-by-Step Guide to Creating a Voting Application

Step 1: Setting Up Your Project

To start, create a directory for your project, and initialize it as a Node.js app:

mkdir voting-app
cd voting-app
npm init -y

Next, install the necessary packages:

npm install express socket.io mongodb

Step 2: Create the Server

In your project directory, create a file named server.js. This will be the backbone of your application.

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const mongoose = require('mongoose');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
mongoose.connect('mongodb://localhost/votes', { useNewUrlParser: true, useUnifiedTopology: true });
// Define your vote schema and model
const voteSchema = new mongoose.Schema({
    option: String,
    count: { type: Number, default: 0 }
});
const Vote = mongoose.model('Vote', voteSchema);
app.use(express.static('public'));
io.on('connection', (socket) => {
    console.log('New client connected');
// Logic for handling votes
    socket.on('vote', (option) => {
        Vote.findOneAndUpdate({ option }, { $inc: { count: 1 } }, { new: true, upsert: true })
            .then((result) => {
                io.emit('update', result);
            });
    });
socket.on('disconnect', () => {
        console.log('Client disconnected');
    });
});
const PORT = process.env.PORT || 4000;
server.listen(PORT, () => console.log(`Server running on port ${PORT}`));

Step 3: Create the Frontend

Create a directory named public and then create an index.html file inside it:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Voting App</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();
function vote(option) {
            socket.emit('vote', option);
        }
socket.on('update', (result) => {
            const voteCount = document.getElementById(result.option);
            voteCount.innerText = result.count;
        });
    </script>
</head>
<body>
    <h1>Vote for Your Favorite Option</h1>
    <button onclick="vote('Option A')">Option A</button>
    <button onclick="vote('Option B')">Option B</button>
<h2>Vote Counts</h2>
    <p>Option A: &