يعد إنشاء خدمة تقصير عناوين URL طريقة رائعة للتعمق في التطوير الكامل باستخدام Node.js وMongoDB. في هذه المدونة، سنتعرف على عملية إنشاء تطبيق لتقصير عناوين URL، والذي يسمح للمستخدمين بتحويل عناوين URL الطويلة إلى إصدارات مختصرة وتتبع استخدامها.
لمتابعة هذا البرنامج التعليمي، يجب أن يكون لديك:
أولاً، قم بإنشاء دليل جديد لمشروعك وقم بتهيئته باستخدام npm:
mkdir url-shortener-app cd url-shortener-app npm init -y
بعد ذلك، قم بتثبيت التبعيات الضرورية:
npm install express mongoose cors dotenv npm install --save-dev nodemon
قم بإنشاء بنية المجلد التالي:
url-shortener-app/ ├── controllers/ │ └── urlController.js ├── models/ │ └── urlModel.js ├── routes/ │ └── urlRoutes.js ├── .env ├── index.js ├── package.json
في ملف 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
في ملف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);
في ملف المسارات/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;
في ملف 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 لاستكشاف الكود بالتفصيل.
لا تتردد في تخصيص المدونة وفقًا لتفضيلاتك وتقديم المزيد من التفاصيل أو التوضيحات عند الحاجة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3