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
Lepaskan: 2024-07-23 17:18:34
asal
739 orang telah melayarinya

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
Salin selepas log masuk

Langkah 2: Pasang Ketergantungan

Seterusnya, pasang kebergantungan yang diperlukan:

npm install express mongoose cors dotenv
npm install --save-dev nodemon
Salin selepas log masuk

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
Salin selepas log masuk

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}`);
});
Salin selepas log masuk

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

MONGODB_USER=yourMongoDBUsername
MONGODB_PASSWORD=yourMongoDBPassword
Salin selepas log masuk

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);
Salin selepas log masuk

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;
Salin selepas log masuk

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 };
Salin selepas log masuk

Menjalankan Aplikasi

Mulakan pelayan menggunakan arahan berikut:

npm run dev
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan