"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Creación de una aplicación de acortamiento de URL con Node.js y MongoDB

Creación de una aplicación de acortamiento de URL con Node.js y MongoDB

Publicado el 2024-07-30
Navegar:396

Building a URL Shortener App with Node.js and MongoDB

Crear un servicio de acortamiento de URL es una excelente manera de sumergirse en el desarrollo completo con Node.js y MongoDB. En este blog, recorreremos el proceso de creación de una aplicación acortadora de URL, que permite a los usuarios convertir URL largas en versiones acortadas y realizar un seguimiento de su uso.

Requisitos previos

Para seguir este tutorial, debes tener:

  • Node.js instalado
  • Conocimientos básicos de JavaScript y Express.js
  • Una base de datos MongoDB (puede usar MongoDB Atlas para una solución en la nube)

Configuración del proyecto

Paso 1: inicializar el proyecto

Primero, crea un nuevo directorio para tu proyecto e inicialízalo con npm:

mkdir url-shortener-app
cd url-shortener-app
npm init -y

Paso 2: instalar dependencias

A continuación, instale las dependencias necesarias:

npm install express mongoose cors dotenv
npm install --save-dev nodemon

Paso 3: Estructura del proyecto

Cree la siguiente estructura de carpetas:

url-shortener-app/
├── controllers/
│   └── urlController.js
├── models/
│   └── urlModel.js
├── routes/
│   └── urlRoutes.js
├── .env
├── index.js
├── package.json

Construyendo el backend

Paso 4: configurar el servidor Express

En el archivo index.js, configure el servidor Express y conéctese a MongoDB:

const express = require('express');
const mongoose = require('mongoose');
const urlRoutes = require('./routes/urlRoutes');
const cors = require('cors');

const app = express();
app.use(express.json());

require("dotenv").config();

const dbUser = process.env.MONGODB_USER;
const dbPassword = process.env.MONGODB_PASSWORD;

// Connect to MongoDB
mongoose
    .connect(
        `mongodb srv://${dbUser}:${dbPassword}@cluster0.re3ha3x.mongodb.net/url-shortener-app`,
        { useNewUrlParser: true, useUnifiedTopology: true }
    )
    .then(() => {
        console.log("Connected to MongoDB database!");
    })
    .catch((error) => {
        console.error("Connection failed!", error);
    });

app.use(cors({
    origin: "*",
}));

app.get('/', (req, res) => {
    res.send('Welcome to URL Shortener API');
});

app.use('/api', urlRoutes);

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

Cree un archivo .env en el directorio raíz para almacenar variables de entorno:

MONGODB_USER=yourMongoDBUsername
MONGODB_PASSWORD=yourMongoDBPassword

Paso 5: definir el modelo de URL

En el archivo models/urlModel.js, defina el esquema para las URL:

const mongoose = require('mongoose');

const urlSchema = new mongoose.Schema({
    originalUrl: { type: String, required: true },
    shortUrl: { type: String, required: true, unique: true },
    clicks: { type: Number, default: 0 },
    expirationDate: { type: Date },
    createdAt: { type: Date, default: Date.now },
});

module.exports = mongoose.model('Url', urlSchema);

Paso 6: crear rutas

En el archivo route/urlRoutes.js, defina las rutas para la API:

const express = require('express');
const { createShortUrl, redirectUrl, getUrls, getDetails, deleteUrl } = require('../controllers/urlController');
const router = express.Router();

router.post('/shorten', createShortUrl);
router.get('/urls', getUrls);
router.get('/:shortUrl', redirectUrl);
router.get('/details/:shortUrl', getDetails);
router.delete('/delete/:shortUrl', deleteUrl);

module.exports = router;

Paso 7: Implementar controladores

En el archivo controladores/urlController.js, implemente las funciones del controlador:

const Url = require('../models/urlModel');

function generateUniqueId(length) {
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let result = '';
    for (let i = 0; i  {
    const { originalUrl } = req.body;
    const shortUrl = generateUniqueId(5);
    const urlRegex = new RegExp(/^(http|https):\/\/[^ "] $/);
    if (!urlRegex.test(originalUrl))
        return res.status(400).json('Invalid URL');
    const url = await Url.findOne({ originalUrl });
    if (url) {
        res.json(url);
        return;
    }
    const expirationDate = new Date();
    expirationDate.setDate(expirationDate.getDate()   7);
    const newUrl = new Url({ originalUrl, shortUrl, expirationDate });
    await newUrl.save();
    res.json(newUrl);
};

const redirectUrl = async (req, res) => {
    const { shortUrl } = req.params;
    const url = await Url.findOne({ shortUrl });
    if (!url || (url.expirationDate && url.expirationDate  {
    try {
        const urls = await Url.find({}).sort({ _id: -1 });
        res.json(urls);
    } catch (error) {
        res.status(500).json({ message: 'Server Error' });
    }
};

const getDetails = async (req, res) => {
    try {
        const { shortUrl } = req.params;
        const url = await Url.findOne({ shortUrl });
        if (url) {
            res.json(url);
        } else {
            res.status(404).json('URL not found');
        }
    } catch (error) {
        res.status(500).json({ message: 'Server Error' });
    }
};

const deleteUrl = async (req, res) => {
    try {
        const { shortUrl } = req.params;
        await Url.findOneAndDelete({ shortUrl });
        res.json('URL deleted');
    } catch (error) {
        res.status(500).json({ message: 'Server Error' });
    }
};

module.exports = { createShortUrl, redirectUrl, getDetails, getUrls, deleteUrl };

Ejecutando la aplicación

Inicie el servidor usando el siguiente comando:

npm run dev

Este comando iniciará su servidor con Nodemon, que reiniciará automáticamente el servidor cuando realice cambios en su código.

Conclusión

En este blog, hemos creado una aplicación sencilla para acortar URL utilizando Node.js y MongoDB. Esta aplicación permite a los usuarios acortar las URL, realizar un seguimiento de su uso y administrarlas con fechas de vencimiento. Este proyecto es un excelente punto de partida para aprender sobre el desarrollo completo y se puede ampliar con funciones adicionales como autenticación de usuario, alias de URL personalizados y más.

Explorando el código

Visita el repositorio de GitHub para explorar el código en detalle.


Siéntete libre de personalizar el blog según tus preferencias y proporcionar más detalles o explicaciones cuando sea necesario.

Declaración de liberación Este artículo se reproduce en: https://dev.to/manthanank/building-a-url-shortener-app-with-nodejs-and-mongodb-bhh?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3