«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создание приложения для сокращения URL-адресов с помощью Node.js и MongoDB

Создание приложения для сокращения URL-адресов с помощью Node.js и MongoDB

Опубликовано 30 июля 2024 г.
Просматривать:413

Building a URL Shortener App with Node.js and MongoDB

Создание службы сокращения URL-адресов — отличный способ погрузиться в полноценную разработку с использованием Node.js и MongoDB. В этом блоге мы рассмотрим процесс создания приложения для сокращения URL-адресов, которое позволяет пользователям преобразовывать длинные URL-адреса в сокращенные версии и отслеживать их использование.

Предварительные условия

Чтобы следовать этому руководству, у вас должно быть:

  • Node.js установлен
  • Базовые знания JavaScript и 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 определите маршруты для 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;

Шаг 7. Реализуйте контроллеры

В файле контроллеры/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