Rumah >hujung hadapan web >tutorial js >Membina Apl Pemendek URL dengan Node.js dan MongoDB

Membina Apl Pemendek URL dengan Node.js dan MongoDB

WBOY
WBOYasal
2024-07-23 17:18:34750semak imbas

Building a URL Shortener App with Node.js and MongoDB

Mencipta perkhidmatan pemendek URL ialah cara terbaik untuk menyelami pembangunan tindanan penuh dengan Node.js dan MongoDB. Dalam blog ini, kami akan melalui proses membina aplikasi pemendek URL, yang membolehkan pengguna menukar URL yang panjang kepada versi yang dipendekkan dan menjejaki penggunaannya.

Prasyarat

Untuk mengikuti tutorial ini, anda sepatutnya mempunyai:

  • Node.js dipasang
  • Pengetahuan asas JavaScript dan Express.js
  • Pangkalan data MongoDB (anda boleh menggunakan MongoDB Atlas untuk penyelesaian awan)

Persediaan Projek

Langkah 1: Mulakan Projek

Mula-mula, buat direktori baharu untuk projek anda dan mulakan dengan npm:

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

Langkah 2: Pasang Ketergantungan

Seterusnya, pasang kebergantungan yang diperlukan:

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

Langkah 3: Struktur Projek

Buat struktur folder berikut:

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

Membina Bahagian Belakang

Langkah 4: Sediakan Pelayan Ekspres

Dalam fail index.js, sediakan pelayan Express dan sambung ke 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}`);
});

Buat fail .env dalam direktori akar untuk menyimpan pembolehubah persekitaran:

MONGODB_USER=yourMongoDBUsername
MONGODB_PASSWORD=yourMongoDBPassword

Langkah 5: Tentukan Model URL

Dalam fail models/urlModel.js, tentukan skema untuk 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);

Langkah 6: Buat Laluan

Dalam fail route/urlRoutes.js, tentukan laluan untuk 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;

Langkah 7: Laksanakan Pengawal

Dalam fail controllers/urlController.js, laksanakan fungsi pengawal:

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

Menjalankan Aplikasi

Mulakan pelayan menggunakan arahan berikut:

npm run dev

Arahan ini akan memulakan pelayan anda dengan Nodemon, yang akan memulakan semula pelayan secara automatik apabila anda membuat perubahan pada kod anda.

Kesimpulan

Dalam blog ini, kami telah membina aplikasi pemendek URL yang ringkas menggunakan Node.js dan MongoDB. Aplikasi ini membolehkan pengguna memendekkan URL, menjejaki penggunaannya dan mengurusnya dengan tarikh tamat tempoh. Projek ini merupakan titik permulaan yang bagus untuk mempelajari tentang pembangunan tindanan penuh dan boleh dikembangkan dengan ciri tambahan seperti pengesahan pengguna, alias URL tersuai dan banyak lagi.

Meneroka Kod

Lawati repositori GitHub untuk meneroka kod secara terperinci.


Jangan ragu untuk menyesuaikan blog mengikut keutamaan anda dan berikan lebih banyak butiran atau penjelasan jika perlu.

Atas ialah kandungan terperinci Membina Apl Pemendek URL dengan Node.js dan MongoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn