Создание службы сокращения 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 определите маршруты для 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;
В файле контроллеры/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