URL 단축기를 만드는 방법.
19341 단어 webdevmongodbapijavascript
참조용으로 포크 또는 복제repository
NPM 패키지 사용
cors
crc
express
mongodb
url
dotenv
nodemon
프로젝트 초기화
npm 프로젝트
npm init -y
초기화 및 api.js 파일 생성서버 구축
종속성 설치 및 가져오기
- nodemon은 api.js라는 서버 파일을 자동으로 업데이트하는 데 사용됩니다.
- dotenv는 환경 변수를 파일에 로드하는 데 사용됩니다.
2. 종속성을 api.js로 가져오기
const express = require("express");
const cors = require("cors");
const { crc32 } = require("crc");
const { MongoClient } = require("mongodb");
const { URL } = require("url");
** 서버 시작 **
1. 이 코드 줄을 사용하여 익스프레스 앱 인스턴스를 만듭니다.
const app = express();
2. 서버가 POST 요청에서 json 파일을 수신할 수 있도록 합니다.
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());
3. 서버에서 CORS를 활성화합니다. 이것은 다른 주소에서 서버에 대한 액세스를 제어하는 데 도움이 됩니다here.
app.use(cors());
4. 서버가 포트에서 수신하도록 합니다.
app.listen(process.env.PORT || 3030);
process.env.PORT
배포 지원이제 작동하는 서버가 생겼습니다 🎉🎉. 하지만 지금은 아무 것도 하지 않습니다. 그래서 그것을 고칠 수 있습니다 ...
서버를 mongoDB에 연결
로컬에서 mongodb를 시작하는 방법을 모르는 경우. 시작할 수 있는 link입니다.
const dbName = "dbName";
let collection = null // Global Variable
let main = async () => {
let url = "mongodb://localhost:27017";
const client = new MongoClient(url);
await client.connect();
const db = client.db(dbName);
collection = db.collection("urls");
const deleteResult = await collection.deleteMany({});
// deletes all entry after each restart
};
그리고 함수를 호출합니다
main()
.이제 서버가 데이터베이스에 연결되었습니다.
링크 쇼트너 기능
URL을 축소하기 위해 CRC32 해시 알고리즘을 사용할 것입니다. 이것은 crc 패키지가 작동하는 곳입니다.
let createUrl = (url) => {
let shortenedUrl = crc32(url).toString(16);
return shortenedUrl;
};
이 기능은 URL을 8자 문자열로 줄입니다.
데이터베이스에서 생성 및 읽기
우리는 다음과 같은 쌍으로 컬렉션을 만들 것입니다.
{
url:'original URL,
shortenedUrl:'shrinked URL of the absolute URL
}
let addUrl = async (url, shortenedUrl) => {
const insertResult = await collection.insertOne({ shortenedUrl, url });
return insertResult;
};
let findUrl = async (shortenedUrl) => {
const findResult = await collection.find({ shortenedUrl }).toArray();
return findResult;
};
API에 경로 추가
URL을 축소하려면 api.js에서 POST 요청을 생성해야 합니다.
app.post("/shrink", async (req, res) => {
...
});
경로를 정의한 후. 들어오는 요청을 처리해야 합니다.
게시물 요청 본문에서 URL을 가져오고 이전 기능을 사용하여 축소합니다.
let { url } = req.body;
let shortenedUrl = createUrl(url);
다음으로 findUrl() 함수를 사용하여 shortedUrl이 이미 데이터베이스에 있는지 확인합니다. 조회가 발생하면 shortedUrl을 반환하거나 다음 부분으로 이동합니다.
let result = await findUrl(shortenedUrl);
if (result.length >= 1) return res.json({ shortenedUrl });
shortedUrl이 존재하지 않으면 위에서 정의한 구조로 데이터베이스에 추가하고 shortedUrl을 다시 보냅니다.
let status = await addUrl(url, shortenedUrl);
if (status?.acknowledged) return res.json({ shortenedUrl });
else return res.json({ error: true }); // Not to make the server crash
한 스니펫의 '/shrink' 경로
app.post("/shrink", async (req, res) => {
let { url } = req.body;
let shortenedUrl = createUrl(url);
let result = await findUrl(shortenedUrl);
if (result.length >= 1) return res.json({ shortenedUrl });
let status = await addUrl(url, shortenedUrl);
if (status?.acknowledged) return res.json({ shortenedUrl });
else return res.json({ error: true });
});
URL을 늘리기 위해 GET 경로를 정의할 것입니다.
먼저 api.js에서 경로를 정의합니다.
app.get("/s/:shortUrl", async (req, res) => {
...
});
경로 섹션의 :shortUrl은 '/s/' 뒤의 모든 섹션을 변수로 캡슐화합니다.
먼저 URL이 데이터베이스에 있는지 확인합니다. 데이터베이스에 있는 경우 사용자를 URL로 리디렉션하거나 404 메시지를 보냅니다.
let { shortUrl } = req.params;
let result = await findUrl(shortUrl);
if (result.length > 0) return res.redirect(result[0]?.url);
else res.json({ 404: "no URL found" });
한 스니펫의 '/s/:shortUrl' 경로
app.get("/s/:shortUrl", async (req, res) => {
let { shortUrl } = req.params;
let result = await findUrl(shortUrl);
if (result.length > 0) return res.redirect(result[0]?.url);
else res.json({ 404: "no URL found" });
});
그리고 짜잔 작동하는 링크 단축기가 있습니다 🎉🎉🎊
다음은 작동하는 링크 단축기입니다shrinkinglinks.
Reference
이 문제에 관하여(URL 단축기를 만드는 방법.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/prajyu/how-to-make-a-url-shortner-1a20텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)