Heim > Web-Frontend > js-Tutorial > Erstellen einer URL-Shortener-App mit Node.js und MongoDB

Erstellen einer URL-Shortener-App mit Node.js und MongoDB

WBOY
Freigeben: 2024-07-23 17:18:34
Original
742 Leute haben es durchsucht

Building a URL Shortener App with Node.js and MongoDB

Das Erstellen eines URL-Shortener-Dienstes ist eine großartige Möglichkeit, in die Full-Stack-Entwicklung mit Node.js und MongoDB einzutauchen. In diesem Blog gehen wir durch den Prozess der Erstellung einer URL-Shortener-Anwendung, die es Benutzern ermöglicht, lange URLs in verkürzte Versionen umzuwandeln und deren Nutzung zu verfolgen.

Voraussetzungen

Um diesem Tutorial folgen zu können, sollten Sie Folgendes haben:

  • Node.js installiert
  • Grundkenntnisse in JavaScript und Express.js
  • Eine MongoDB-Datenbank (Sie können MongoDB Atlas für eine Cloud-Lösung verwenden)

Projekt-Setup

Schritt 1: Initialisieren Sie das Projekt

Erstellen Sie zunächst ein neues Verzeichnis für Ihr Projekt und initialisieren Sie es mit npm:

mkdir url-shortener-app
cd url-shortener-app
npm init -y
Nach dem Login kopieren

Schritt 2: Abhängigkeiten installieren

Als nächstes installieren Sie die erforderlichen Abhängigkeiten:

npm install express mongoose cors dotenv
npm install --save-dev nodemon
Nach dem Login kopieren

Schritt 3: Projektstruktur

Erstellen Sie die folgende Ordnerstruktur:

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

Aufbau des Backends

Schritt 4: Express-Server einrichten

In der Datei index.js richten Sie den Express-Server ein und stellen eine Verbindung zu MongoDB her:

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}`);
});
Nach dem Login kopieren

Erstellen Sie eine .env-Datei im Stammverzeichnis, um Umgebungsvariablen zu speichern:

MONGODB_USER=yourMongoDBUsername
MONGODB_PASSWORD=yourMongoDBPassword
Nach dem Login kopieren

Schritt 5: Definieren Sie das URL-Modell

Definieren Sie in der Datei models/urlModel.js das Schema für URLs:

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);
Nach dem Login kopieren

Schritt 6: Routen erstellen

Definieren Sie in der Datei „routes/urlRoutes.js“ die Routen für die 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;
Nach dem Login kopieren

Schritt 7: Controller implementieren

Implementieren Sie in der Datei „controllers/urlController.js“ die Controller-Funktionen:

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

function generateUniqueId(length) {
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let result = '';
    for (let i = 0; i < length; i++) {
        const randomIndex = Math.floor(Math.random() * characters.length);
        result += characters[randomIndex];
    }
    return result;
}

const createShortUrl = async (req, res) => {
    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 < new Date())) {
        res.status(404).json('URL expired or not found');
        return;
    }
    url.clicks++;
    await url.save();
    res.redirect(url.originalUrl);
};

const getUrls = async (req, res) => {
    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 };
Nach dem Login kopieren

Ausführen der Anwendung

Starten Sie den Server mit dem folgenden Befehl:

npm run dev
Nach dem Login kopieren

Dieser Befehl startet Ihren Server mit Nodemon, der den Server automatisch neu startet, wenn Sie Änderungen an Ihrem Code vornehmen.

Abschluss

In diesem Blog haben wir eine einfache URL-Shortener-Anwendung mit Node.js und MongoDB erstellt. Mit dieser Anwendung können Benutzer URLs kürzen, ihre Nutzung verfolgen und sie mit Ablaufdaten verwalten. Dieses Projekt ist ein guter Ausgangspunkt, um etwas über die Full-Stack-Entwicklung zu lernen und kann um zusätzliche Funktionen wie Benutzerauthentifizierung, benutzerdefinierte URL-Aliase und mehr erweitert werden.

Den Code erkunden

Besuchen Sie das GitHub-Repository, um den Code im Detail zu erkunden.


Fühlen Sie sich frei, den Blog nach Ihren Wünschen anzupassen und bei Bedarf weitere Details oder Erklärungen bereitzustellen.

Das obige ist der detaillierte Inhalt vonErstellen einer URL-Shortener-App mit Node.js und MongoDB. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage