AppWriteとExpressを使用してURL短縮を構築する
何がappwriteですか?
AppWriteは、開発者が取得し、任意のプロジェクトのバックエンドのニーズのほとんどを使用して実行できるセルフホストのバックエンドソリューションです.AppWriteのような機能へのアクセス
私たちはこの記事でAppWriteでURL短縮を構築するつもりです.
必要条件
appwriteの設定
に追加するhomepage をクリックします.
コンピュータの対応する端末コマンドをコピーし、Dockerが起動していることを確認し、コマンドを実行します.インストールが完了するまでしばらく待ってください.
HTTPポートを3000に設定し、他のすべての値をデフォルトとして残します.ブラウザへのヘッドと訪問localhost:3000
あなたはサインアップページにあるべきです.もし頭がなければhere
アカウントを作成した後、名前のURLを指定する新しいプロジェクトを作成します.
このプロジェクトでは、データベース機能のみを使用していますが、APIキーが必要です.APIキーをクリックし、新しいキーを追加する
をクリックしてすべてのパーミッションを有効にし、' admin 'の名前を付けます.それを作成し、あなたの秘密を表示する秘密をクリックします.後でそれを必要とするようにどこかにコピーします.
最後に、ホームページから「設定」をクリックし、プロジェクトのIDとAPIのエンドポイントをコピーします.
Expressサーバーの設定
クローンrepo ローカル.ラン
yarn
or npm install
必要なすべてのパッケージをインストールするには.追加する.以下の変数を含むenvファイルAPPWRITE_KEY="YOUR_APPWRITE_KEY"
PROJECT_ID="YOUR_PROJECT_ID"
LINKS_COLLECTION_ID="YOUR_LINKS_COLLECTION_ID"
現在のフォルダ構造は次のようになります.私は、あなたがどこでこの『リンク集』が来ているかについて疑問に思っているということを知っています.さて、リンクと短い名前を保持するために、コレクションを作成する必要があります.AppWriteリンクを開きます.jsファイル.
require("dotenv").config();
const sdk = require("node-appwrite");
const client = new sdk.Client();
client
.setEndpoint("http://localhost:3000/v1") // Your API Endpoint
.setProject(process.env.PROJECT_ID) // Your project ID
.setKey(process.env.APPWRITE_KEY); // Your API key
const db = new sdk.Database(client);
const run = async () => {
try {
let collection = await db.createCollection(
"Links",
[],
[],
[
{
label: "originalURL",
key: "originalurl",
type: "text",
default: "Empty Name",
required: true,
array: false,
},
{
label: "uniqueName",
key: "uniquename",
type: "text",
default: "Empty",
required: true,
array: false,
},
{
label: "shortUrl",
key: "shorturl",
type: "text",
default: "Empty",
required: true,
array: false,
},
]
);
console.log(collection.$id);
} catch (e) {
console.log(e);
}
};
run();
我々は単にAPIエンドポイントだけでなく、環境変数を渡すことによって、我々のクライアントオブジェクトを初期化しています.DB行16のcreateCollection関数は、次の順序で4つの引数をとりますnode appwrite-links.js
端末で、それはあなたのリンク集IDを吐き出します.envファイル.パブリックフォルダには、我々が提供するフロントエンドが含まれます.アプリ.JSファイルは単にサーバーとルートを設定します.アプリのcruxを参照するには、URLに頭.コントローラフォルダのJSファイル.
const { getDB } = require("./../appwrite");
const { v4: uuidv4 } = require("uuid");
const PORT = process.env.port || 3001;
const baseUrl = process.env.BASE_URL || `http://localhost:${PORT}`;
const createLink = async (req, res) => {
let { originalURL, uniqueName } = req.body;
const db = getDB();
if (uniqueName) {
let documents = await db.listDocuments(process.env.LINKS_COLLECTION_ID, [
`uniquename=${uniqueName}`,
]);
if (documents.sum > 0)
return res.status(403).send("This unique name is taken");
} else {
while (true) {
uniqueName = uuidv4().substr(0, 6);
let documents = await db.listDocuments(process.env.LINKS_COLLECTION_ID, [
`uniquename=${uniqueName}`,
]);
if (documents.sum == 0) break;
}
}
db.createDocument(process.env.LINKS_COLLECTION_ID, {
originalurl: originalURL,
uniquename: uniqueName,
shorturl: baseUrl + "/" + uniqueName,
})
.then((resp) => {
return res.status(201).send({ shortUrl: resp.shorturl });
})
.catch(console.log);
};
const getLink = async (req, res) => {
const { uniqueId } = req.params;
const db = getDB();
if (!uniqueId || uniqueId === "undefined")
return res.status(403).send("Invalid Request");
let documentsList = await db.listDocuments(process.env.LINKS_COLLECTION_ID, [
`uniquename=${uniqueId}`,
]);
if (documentsList.sum == 0)
return res.status(404).send("Unique Name not found");
res.redirect(documentsList.documents[0].originalurl);
};
module.exports = {
createLink,
getLink,
};
リクエスト本文で一意の名前と元のURLを期待します.一意の名前が送られないならば、UUIDパッケージでユーザーのために1つをつくってください、しかし、それが6文字より長くないことを確認してください.また、それが存在するならば、データベースをチェックしてください、そして、ユニークな名前が要求体にあるならば、新しいものを作成するか、ユーザーにエラーを送ってください.
私たちは単にパラメータとして渡された一意の名前を使用して、元のURLを取得し、そのURLにユーザーをリダイレクトします.
yarn start
端末とヘッドlocalhost:3001 プロジェクトライブを見る🌟この記事では、私はAppWriteとその主な機能に迅速なダイビングを示した.その後、AppwriteでシンプルなURL短縮を構築するために進んだ.ホープユー🤗.
任意の提案や質問にコメントしてください.また、私の電子メールで私に到達することができます.[email protected] またはTwitter上では、.
Reference
この問題について(AppWriteとExpressを使用してURL短縮を構築する), 我々は、より多くの情報をここで見つけました https://dev.to/dro1/building-a-url-shortener-using-appwrite-and-express-128iテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol