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.
Um diesem Tutorial folgen zu können, sollten Sie Folgendes haben:
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
Als nächstes installieren Sie die erforderlichen Abhängigkeiten:
npm install express mongoose cors dotenv npm install --save-dev nodemon
Erstellen Sie die folgende Ordnerstruktur:
url-shortener-app/ ├── controllers/ │ └── urlController.js ├── models/ │ └── urlModel.js ├── routes/ │ └── urlRoutes.js ├── .env ├── index.js ├── package.json
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}`); });
Erstellen Sie eine .env-Datei im Stammverzeichnis, um Umgebungsvariablen zu speichern:
MONGODB_USER=yourMongoDBUsername MONGODB_PASSWORD=yourMongoDBPassword
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);
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;
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 };
Starten Sie den Server mit dem folgenden Befehl:
npm run dev
Dieser Befehl startet Ihren Server mit Nodemon, der den Server automatisch neu startet, wenn Sie Änderungen an Ihrem Code vornehmen.
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.
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!