AppWriteとExpressを使用してURL短縮を構築する



何がappwriteですか?
AppWriteは、開発者が取得し、任意のプロジェクトのバックエンドのニーズのほとんどを使用して実行できるセルフホストのバックエンドソリューションです.AppWriteのような機能へのアクセス
  • ストレージ(メディアファイル)
  • データベース
  • 認証(ユーザの管理)
  • クラウド関数
  • そして、あなたは休息APIからこれらにアクセスすることができます.
    私たちはこの記事でAppWriteでURL短縮を構築するつもりです.

    必要条件
  • ドック
  • ノード
  • 糸(またはNPMしかし、我々は糸を使用しているでしょう)
  • 急行に関する知識

  • 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つの引数をとります
  • name -コレクションの名前です.
  • read array -コレクションから読み込むユーザーIDの配列.
  • write array -コレクションに書き込むことができるユーザのユーザIDの配列.
  • ルール-コレクション内の各フィールドをどのように使用するかを指示する各オブジェクトを持つオブジェクトの配列.
  • ラン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上では、.