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);
routes/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;
controllers/urlController.js 파일에서 컨트롤러 기능을 구현합니다.
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 };
다음 명령을 사용하여 서버를 시작합니다.
npm run dev
이 명령은 Nodemon으로 서버를 시작하며, 코드를 변경하면 서버가 자동으로 다시 시작됩니다.
이 블로그에서는 Node.js와 MongoDB를 사용하여 간단한 URL 단축 애플리케이션을 구축했습니다. 이 애플리케이션을 사용하면 사용자는 URL을 단축하고, 사용량을 추적하고, 만료 날짜로 관리할 수 있습니다. 이 프로젝트는 풀 스택 개발에 대해 배우기 위한 훌륭한 출발점이며 사용자 인증, 사용자 정의 URL 별칭 등과 같은 추가 기능으로 확장될 수 있습니다.
GitHub 저장소를 방문하여 코드를 자세히 살펴보세요.
원하는 대로 블로그를 맞춤설정하고 필요한 경우 자세한 내용이나 설명을 제공하세요.
위 내용은 Node.js와 MongoDB를 사용하여 URL 단축기 앱 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!