#30DaysOfAppwrite: 첫 번째 클라우드 기능
소개
#30DaysOfAppwrite은 기본부터 Cloud Functions와 같은 고급 기능에 이르기까지 Appwrite의 모든 기능을 개발자에게 제공하는 데 초점을 맞춘 한 달 간의 이벤트입니다! 이와 함께 완전한 기능을 갖춘 중형 복제본을 구축하여 이러한
실제 앱을 구축할 때 개념을 적용할 수 있습니다. 우리와 함께하는 개발자를 위한 흥미로운 상품도 있습니다!
읽는 시간
Medium Clone에서 구현할 첫 번째 Cloud 함수는 게시물의 읽기 시간을 계산하는 함수입니다. 게시물의 읽기 시간을 계산하는 것은 콘텐츠의 길이에 따라 꽤 광범위한 작업이 될 수 있습니다. 응용 프로그램의 속도를 불필요하게 늦추지 않기 위해 서버에서 이 프로세스를 실행합니다.
우리는 이 blog post from Infusion Media에서 제안된 공식을 사용할 것입니다.
우선 Posts 컬렉션에 다음 규칙을 추가할 것입니다.
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.
// src/routes/Post.svelte
//...
<i>
{post.readingTime}
</i>
//...
이 글이 마음에 드셨기를 바랍니다. 소셜 미디어를 팔로우하여 모든 게시물을 확인할 수 있습니다. 전체 이벤트 타임라인을 찾을 수 있습니다here.
Appwrite Homepage
Appwrite, Aliens 또는 Unicorns 🦄에 대해 자세히 알아보려면 Discord에서 저희에게 연락해 주세요. 내일 기사도 기대해주세요! 그때까지👋
Reference
이 문제에 관하여(#30DaysOfAppwrite: 첫 번째 클라우드 기능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/appwrite/30daysofappwrite-our-first-cloud-function-59k6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)