#30DaysOfAppwrite: 첫 번째 클라우드 기능

소개



#30DaysOfAppwrite은 기본부터 Cloud Functions와 같은 고급 기능에 이르기까지 Appwrite의 모든 기능을 개발자에게 제공하는 데 초점을 맞춘 한 달 간의 이벤트입니다! 이와 함께 완전한 기능을 갖춘 중형 복제본을 구축하여 이러한
실제 앱을 구축할 때 개념을 적용할 수 있습니다. 우리와 함께하는 개발자를 위한 흥미로운 상품도 있습니다!

읽는 시간



Medium Clone에서 구현할 첫 번째 Cloud 함수는 게시물의 읽기 시간을 계산하는 함수입니다. 게시물의 읽기 시간을 계산하는 것은 콘텐츠의 길이에 따라 꽤 광범위한 작업이 될 수 있습니다. 응용 프로그램의 속도를 불필요하게 늦추지 않기 위해 서버에서 이 프로세스를 실행합니다.

우리는 이 blog post from Infusion Media에서 제안된 공식을 사용할 것입니다.

우선 Posts 컬렉션에 다음 규칙을 추가할 것입니다.

  • 레이블: 독서 시간

  • 키: readingTime

  • 규칙 유형: 텍스트



  • 이제 데이터베이스가 준비되었으므로 클라우드 기능부터 시작하겠습니다. 이를 위해 Node.js 런타임으로 Cloud 함수를 만들 것입니다. 설정 탭 아래의 함수 대시보드에서 database.documents.create 및 database.documents.update 이벤트에 대한 트리거를 활성화해야 합니다. 환경 변수로 다음을 추가할 것입니다.

  • APPWRITE_PROJECT_ID: 프로젝트 ID를 입력합니다.

  • APPWRITE_ENDPOINT: appwrite 엔드포인트를 삽입합니다.

  • APPWRITE_API_KEY: 문서 쓰기 권한이 있는 API 키를 삽입합니다.

  • POSTS_COLLECTION: Posts 컬렉션의 ID를 삽입합니다.

  • 데모 프로젝트의 언어에 충실하기 위해 Node.js로 작성할 것입니다.

    npm을 사용하여 Node.js 패키지를 만듭니다.

    mkdir calculate-reading-time
    cd calculate-reading-time
    npm init -y
    


    이제 종속성으로 node-appwrite를 추가합니다.

    npm install node-appwrite
    

    index.js 파일을 생성하고 다음 내용을 입력합니다.

    const DATA = JSON.parse(process.env.APPWRITE_FUNCTION_EVENT_DATA);
    const POSTS_COLLECTION = process.env.POSTS_COLLECTION;
    
    const { $id, $collection, text, published } = DATA;
    
    // Stop if it's not the Posts Collection or not published
    if ($collection !== POSTS_COLLECTION || !published) {
        return;
    }
    
    // Initialise the client SDK
    const appwrite = require("node-appwrite");
    const client = new appwrite.Client();
    const database = new appwrite.Database(client);
    
    client
        .setEndpoint(process.env.APPWRITE_ENDPOINT) // Your API Endpoint
        .setProject(process.env.APPWRITE_PROJECT_ID) // Your project ID
        .setKey(process.env.APPWRITE_API_KEY) // Your secret API key
    ;
    
    // Get word count
    let words = text.match(
        /[A-Za-z\u00C0-\u017F]+|[\u0400-\u04FF\u0500–\u052F]+|[\u0370-\u03FF\u1F00-\u1FFF]+|[\u4E00–\u9FFF]|\d+/g
    );
    
    words = words ? words.length : 0;
    
    let minutes = words / 200;
    let seconds = (minutes % 1) * 60;
    let readingTime = `${Math.floor(minutes)}m ${Math.floor(seconds)}s`;
    
    // Don't update Post if reading time has not changed
    if (readingTime === DATA.readingTime) {
        return;
    }
    
    database.updateDocument($collection, $id, {
        readingTime: readingTime
    }).then(console.log).catch(console.error)
    


    이 함수는 모든 문서 쓰기 및 업데이트 이벤트에서 트리거되며 읽기 시간을 계산하고 이를 readingTime 속성에 저장합니다. 우리는 또한 읽기 시간이 변경되는지 확인하고 있습니다. 이것은 무한 루프를 생성하지 않고 Cloud 함수로 불필요하게 API를 누르는 데 필요합니다.

    Appwrite CLI를 사용하여 함수를 매우 쉽게 업로드할 수 있습니다(또는 대시보드에서 수동으로 업로드).

    appwrite functions createTag --code=. --functionId=[YOUR_FUNCTION_ID] --command='node index.js'
    


    Don't forget to activate the tag we just created!
    We covered both the on Day 23. So feel free to check it out if you get stuck.



    클라우드 기능 테스트



    이제 게시물 컬렉션으로 이동하여 게시된 게시물의 텍스트를 편집할 때 읽기 시간 계산을 쉽게 테스트할 수 있습니다. Functions 대시보드로 이동하여 로그를 확인하거나 방금 업데이트한 문서를 새로 고치고 readingTime 속성이 어떻게 업데이트되었는지 확인할 수 있습니다!



    우리에게 남은 유일한 것은 각 게시물의 맨 위에 있는 Medium Clone에 읽기 시간을 추가하는 것입니다.

    // src/routes/Post.svelte
    
    //...
    <i>
      {post.readingTime}
    </i>
    //...
    


    학점



    이 글이 마음에 드셨기를 바랍니다. 소셜 미디어를 팔로우하여 모든 게시물을 확인할 수 있습니다. 전체 이벤트 타임라인을 찾을 수 있습니다here.
  • Discord Server

  • Appwrite Homepage
  • Appwrite's Github

  • Appwrite, Aliens 또는 Unicorns 🦄에 대해 자세히 알아보려면 Discord에서 저희에게 연락해 주세요. 내일 기사도 기대해주세요! 그때까지👋

    좋은 웹페이지 즐겨찾기