"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إنشاء تطبيق URL Shortener باستخدام Node.js وMongoDB

إنشاء تطبيق URL Shortener باستخدام Node.js وMongoDB

تم النشر بتاريخ 2024-07-30
تصفح:902

Building a URL Shortener App with Node.js and MongoDB

يعد إنشاء خدمة تقصير عناوين URL طريقة رائعة للتعمق في التطوير الكامل باستخدام Node.js وMongoDB. في هذه المدونة، سنتعرف على عملية إنشاء تطبيق لتقصير عناوين URL، والذي يسمح للمستخدمين بتحويل عناوين URL الطويلة إلى إصدارات مختصرة وتتبع استخدامها.

المتطلبات الأساسية

لمتابعة هذا البرنامج التعليمي، يجب أن يكون لديك:

  • تم تثبيت Node.js
  • المعرفة الأساسية بجافا سكريبت وExpress.js
  • قاعدة بيانات MongoDB (يمكنك استخدام MongoDB Atlas للحصول على حل سحابي)

إعداد مشروع

الخطوة 1: تهيئة المشروع

أولاً، قم بإنشاء دليل جديد لمشروعك وقم بتهيئته باستخدام npm:

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

الخطوة 2: تثبيت التبعيات

بعد ذلك، قم بتثبيت التبعيات الضرورية:

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

الخطوة 3: هيكل المشروع

قم بإنشاء بنية المجلد التالي:

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

بناء الواجهة الخلفية

الخطوة 4: إعداد الخادم السريع

في ملف Index.js، قم بإعداد خادم Express والاتصال بـ 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}`);
});

قم بإنشاء ملف .env في الدليل الجذر لتخزين متغيرات البيئة:

MONGODB_USER=yourMongoDBUsername
MONGODB_PASSWORD=yourMongoDBPassword

الخطوة 5: تحديد نموذج URL

في ملفmodels/urlModel.js، حدد المخطط لعناوين 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);

الخطوة 6: إنشاء الطرق

في ملف المسارات/urlRoutes.js، حدد المسارات لواجهة برمجة التطبيقات:

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;

الخطوة 7: تنفيذ وحدات التحكم

في ملف Controllers/urlController.js، قم بتنفيذ وظائف وحدة التحكم:

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 };

تشغيل التطبيق

قم بتشغيل الخادم باستخدام الأمر التالي:

npm run dev

سيعمل هذا الأمر على تشغيل خادمك باستخدام Nodemon، والذي سيعيد تشغيل الخادم تلقائيًا عند إجراء تغييرات على التعليمات البرمجية الخاصة بك.

خاتمة

في هذه المدونة، قمنا ببناء تطبيق بسيط لتقصير عناوين URL باستخدام Node.js وMongoDB. يتيح هذا التطبيق للمستخدمين تقصير عناوين URL وتتبع استخدامها وإدارتها بتواريخ انتهاء الصلاحية. يعد هذا المشروع نقطة انطلاق رائعة للتعرف على التطوير الكامل ويمكن توسيعه بميزات إضافية مثل مصادقة المستخدم والأسماء المستعارة لعناوين URL المخصصة والمزيد.

استكشاف الكود

قم بزيارة مستودع GitHub لاستكشاف الكود بالتفصيل.


لا تتردد في تخصيص المدونة وفقًا لتفضيلاتك وتقديم المزيد من التفاصيل أو التوضيحات عند الحاجة.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/manthanank/building-a-url-shortener-app-with-nodejs-and-mongodb-bhh?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3