Quickstarters
Feature Overview
How to Build a Backend for ExpressJS?
46 分
はじめに このチュートリアルでは、back4appを使用して、 expressjs アプリケーションの完全なバックエンドを構築する方法を学びます。 データベース管理、cloud code functions、restおよびgraphql api、ユーザー認証、リアルタイムクエリ(ライブクエリ)など、back4appの重要な機能を統合する方法を説明し、expressjsのルートやミドルウェアとシームレスに通信する安全でスケーラブル、かつ堅牢なバックエンドを作成します。 また、back4appの迅速なセットアップと直感的な環境が、サーバーやデータベースを手動で構成するのに比べて、時間と労力を大幅に削減できることを確認します。 その過程で、cloud jobsを使用したタスクのスケジューリングや、外部統合のためのwebhookの設定など、主要な機能に関する実践的な経験を得ることができます。 このチュートリアルの終わりまでには、この基本的なセットアップを本番環境に適したアプリケーションに拡張する準備が整い、必要に応じてカスタムロジックやサードパーティapiを簡単に組み込むことができるようになります。 前提条件 このチュートリアルを完了するには、次のものが必要です back4appアカウントと新しいback4appプロジェクト back4appの始め方。 https //www back4app com/docs/get started/new parse app アカウントを持っていない場合は、無料で作成できます。上記のガイドに従ってプロジェクトを準備してください。 基本的なnode js / express環境 express generator https //expressjs com/en/starter/generator html または同様のツールを使用してこれを設定できます。マシンにnode jsがインストールされていることを確認してください。 node js(バージョン14以上)がインストールされていること npmパッケージをインストールし、ローカル開発サーバーを実行するためにnode jsが必要です。 node jsのインストール https //nodejs org/en/download/ javascriptと基本的なexpressjsの概念に慣れていること expressjs公式ドキュメント。 https //expressjs com/ expressが初めての場合は、始める前に公式ドキュメントまたは初心者向けのチュートリアルを確認してください。 始める前に、これらの前提条件がすべて整っていることを確認してください。back4appプロジェクトを設定し、ローカルのexpressjs環境を準備しておくと、より簡単に進めることができます。 ステップ1 – back4appプロジェクトの設定 新しいプロジェクトを作成する back4app上でexpressjsバックエンドを構築する最初のステップは、新しいプロジェクトを作成することです。まだ作成していない場合は、次の手順に従ってください back4appアカウントにログインする 「新しいアプリ」ボタンをクリックする あなたのback4appダッシュボードで。 アプリに名前を付ける (例:「expressjs バックエンド チュートリアル」)。 プロジェクトが作成されると、あなたのback4appダッシュボードにリストされているのが見えます。このプロジェクトは、このチュートリアルで説明するすべてのバックエンド設定の基盤となります。 parse sdkを接続する back4appは、データを管理し、リアルタイム機能を提供し、ユーザー認証を処理するためにparseプラットフォームに依存しています。あなたのexpressjsアプリケーションをback4appに接続するには、 parse npmパッケージをインストールし、あなたのback4appダッシュボードからの資格情報で初期化する必要があります。 あなたのparseキーを取得する あなたのback4appダッシュボードで、アプリの「アプリ設定」または「セキュリティとキー」セクションに移動して、あなたの アプリケーションid と javascriptキー を見つけてください。 parseサーバーurl (通常は https //parseapi back4app com )を見つけることもできます。 parse sdkをインストールする あなたのexpressjsプロジェクトに npm install parse yarnを使用している場合は、次のようにインストールできます yarn add parse expressjsアプリケーションでparseを初期化します: プロジェクトディレクトリにファイル(例: parseconfig js )を作成することができます。 src/parseconfig js // src/parseconfig js const parse = require('parse/node'); // replace the placeholders with your back4app credentials parse initialize('your application id', 'your javascript key'); parse serverurl = 'https //parseapi back4app com'; module exports = parse; このファイルは、expressアプリの他の場所でparseをインポートするたびに(例:ルートやコントローラーで)、特定のback4appインスタンスに接続するように事前に設定されていることを保証します。 このステップを完了することで、expressjsサーバーとback4appバックエンドの間に安全な接続が確立されました。すべてのリクエストとデータトランザクションは、このsdkを通じて安全にルーティングされ、手動のrestまたはgraphql呼び出しの複雑さが軽減されます(必要に応じてそれらを使用することもできます)。 ステップ2 – データベースの設定 データの保存とクエリ back4appプロジェクトが設定され、parse sdkがexpressアプリに統合されたので、データの保存と取得を開始できます。レコードを作成する最も簡単な方法は、 parse object クラスを使用することです。たとえば、ルートハンドラーの1つで: // routes/todo js const express = require('express'); const router = express router(); const parse = require(' /parseconfig'); // example create a todo item router post('/create', async (req, res) => { try { const { title, iscompleted } = req body; const todo = parse object extend('todo'); const todo = new todo(); todo set('title', title); todo set('iscompleted', iscompleted); const savedtodo = await todo save(); res status(200) json({ message 'todo saved successfully', savedtodo }); } catch (error) { res status(500) json({ error 'error saving todo', details error message }); } }); // example query all todo items router get('/', async (req, res) => { try { const todo = parse object extend('todo'); const query = new parse query(todo); const results = await query find(); res status(200) json(results); } catch (error) { res status(500) json({ error 'error fetching todos', details error message }); } }); module exports = router; また、back4appのrest apiエンドポイントを使用することもできます: curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo back4appはgraphqlインターフェースも提供しています mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } これらの多様なオプションにより、parse sdk、rest、またはgraphqlを通じて、開発プロセスに最も適した方法でデータ操作を統合できます。 スキーマ設計とデータ型 デフォルトでは、parseは スキーマを動的に作成する , しかし、より多くの制御のためにback4appダッシュボードでクラスとデータ型を定義することもできます。 back4appダッシュボードの「データベース」セクションに移動します。 新しいクラスを作成します。 (例:「todo」)そして、タイトル(string)やiscompleted(boolean)などの関連するカラムを追加します。 back4appはさまざまなデータ型もサポートしています string , number , boolean , object , date , file , pointer , array , relation , geopoint , そして polygon 各フィールドに適切な型を選択できます。希望する場合は、expressアプリからオブジェクトを最初に保存するときにparseが自動的にこれらのカラムを作成することもできます。 back4appはデータモデルを設計するのに役立つaiエージェントを提供しています aiエージェントを開く あなたのアプリダッシュボードまたはメニューから。 データモデルを説明する 簡単な言葉で(例:「新しいtodoアプリをback4appで完全なクラススキーマで作成してください。」)。 aiエージェントにスキーマを作成させる aiエージェントを使用すると、データアーキテクチャの設定にかかる時間を節約し、アプリケーション全体での一貫性を確保できます。 リレーショナルデータ リレーショナルデータがある場合—たとえば、複数の category オブジェクトが複数の todo アイテムを指している場合— pointers または relations をparseで使用できます。たとえば、 category へのポインタを追加することができます // linking a task to a category with a pointer const parse = require(' /parseconfig'); async function createtaskforcategory(categoryobjectid, title) { const todo = new parse object('todo'); // construct a pointer to the category const categorypointer = new parse object('category'); categorypointer id = categoryobjectid; // set fields todo set('title', title); todo set('category', categorypointer); try { return await todo save(); } catch (err) { console error('error creating task with category relationship ', err); } } クエリを実行する際には、ポインタデータも含めることができます const parse = require(' /parseconfig'); const query = new parse query('todo'); query include('category'); query find() then((todoswithcategory) => { console log('todos with category details ', todoswithcategory); }); この include('category') 呼び出しは、各todoとともにカテゴリの詳細を取得し、リレーショナルデータをシームレスにアクセス可能にします。 ライブクエリ リアルタイムの更新のために、back4appは live queries を提供します。あなたのexpressjsアプリでは、特定のクラスの変更にサブスクライブできます。通常はフロントエンドのサブスクリプション(reactやangularなど)に関連付けられますが、node環境でリアルタイム接続を管理したり、ウェブソケットを介して接続されたクライアントに更新を渡したりすることもできます。 ライブクエリを有効にする あなたのback4appダッシュボードのアプリの サーバー設定 「ライブクエリ」がオンになっていることを確認してください。 ライブクエリサブスクリプションを初期化する あなたのコードで src/parseconfig js // src/parseconfig js const parse = require('parse/node'); // replace the placeholders with your back4app credentials parse initialize('your application id', 'your javascript key'); parse serverurl = 'https //parseapi back4app com'; // live query's subdomain parse livequeryserverurl = 'wss\ //your subdomain here b4a io'; module exports = parse;// a node script to subscribe to live queries const parse = require(' /parseconfig'); async function subscribetotodos(callback) { const query = new parse query('todo'); const subscription = await query subscribe(); subscription on('create', (newtodo) => { console log('new todo created ', newtodo); callback('create', newtodo); }); subscription on('update', (updatedtodo) => { console log('todo updated ', updatedtodo); callback('update', updatedtodo); }); subscription on('delete', (deletedtodo) => { console log('todo deleted ', deletedtodo); callback('delete', deletedtodo); }); return subscription; } サブスクリプションを行うことで、新しいtodoが作成、更新、または削除されるたびにリアルタイム通知を受け取ります。この機能は、複数のユーザーが追加のポーリングなしで最新のデータを確認する必要があるコラボレーティブまたはダイナミックなアプリに特に価値があります。 ステップ3 – aclとclpを使用したセキュリティの適用 back4appのセキュリティメカニズム back4appはセキュリティを真剣に考え、 アクセス制御リスト (acl) と クラスレベルの権限 (clp) を提供しています。これらの機能により、オブジェクトまたはクラスごとにデータの読み取りや書き込みを制限でき、認可されたユーザーのみがデータを変更できるようになります。 アクセス制御リスト (acl) aclは、どのユーザー、役割、または一般の人々が読み取り/書き込み操作を行えるかを決定するために、個々のオブジェクトに適用されます。例えば const parse = require(' /parseconfig'); async function createprivatetodo(title, owneruser) { const todo = parse object extend('todo'); const todo = new todo(); todo set('title', title); // create an acl granting read/write access only to the owner const acl = new parse acl(owneruser); acl setpublicreadaccess(false); acl setpublicwriteaccess(false); todo setacl(acl); try { return await todo save(); } catch (err) { console error('error saving private todo ', err); } } オブジェクトを保存すると、それには指定されたユーザー以外の誰も読み取りまたは変更できないようにするaclがあります。 クラスレベルの権限 (clp) clp は、クラス全体のデフォルトの権限を管理します。たとえば、そのクラスが公開されて読み取りまたは書き込み可能か、特定の役割のみがアクセスできるかどうかです。 back4appダッシュボードに移動 , アプリを選択し、 データベース セクションを開きます。 クラスを選択 (例:「todo」)。 クラスレベルの権限 タブを開きます。 「認証が必要」などのデフォルトを設定します。読み取りまたは書き込み用、または「公開にアクセス不可」。 これらの権限はベースラインを設定し、aclは個々のオブジェクトの権限を微調整します。堅牢なセキュリティモデルは通常、clp(広範な制限)とacl(オブジェクトごとの細かい制限)を組み合わせます。詳細については、 アプリセキュリティガイドライン。 ステップ4 – クラウド関数の作成とデプロイ クラウドコードは、parse server環境の機能で、サーバー側でカスタムjavascriptコードを実行できるようにします。サーバーやインフラストラクチャを管理する必要はありません。クラウドコードを書くことで、back4appバックエンドを追加のビジネスロジック、検証、トリガー、および安全かつ効率的にparse server上で実行される統合で拡張できます。 動作の仕組み クラウドコードを書くとき、通常はjavascript関数、トリガー、および必要なnpmモジュールを main js (または app js )ファイルに配置します。このファイルはback4appプロジェクトにデプロイされ、parse server環境内で実行されます。これらの関数とトリガーはサーバー上で実行されるため、機密ロジックを処理したり、敏感なデータを処理したり、バックエンド専用のapi呼び出しを行ったりすることを信頼できます。これらのプロセスは、クライアントに直接公開したくないかもしれません。 back4appアプリのすべてのcloud codeは、back4appによって管理されているparse server内で実行されるため、サーバーのメンテナンス、スケーリング、またはプロビジョニングについて心配する必要はありません。main jsファイルを更新してデプロイするたびに、実行中のparse serverは最新のコードで更新されます。 main jsファイル構造 典型的な main js には次のような内容が含まれる場合があります 必要なモジュールのための requireステートメント(npmパッケージ、組み込みnodeモジュール、または他のクラウドコードファイル)。 cloud関数の定義 parse cloud define() を使用して。 トリガー 例えば、 parse cloud beforesave() , parse cloud aftersave() , など。 インストールしたnpmモジュール (必要な場合)。例えば、httpリクエストを行うために axios のようなパッケージをインストールすることがあります。その後、ファイルの先頭でそれをrequire(またはimport)できます。 // main js // 1 import necessary modules and other cloud code files const axios = require('axios'); const report = require(' /reports'); // 2 define a custom cloud function parse cloud define('fetchexternaldata', async (request) => { const url = request params url; if (!url) { throw new error('url parameter is required'); } const response = await axios get(url); return response data; }); // 3 example of a beforesave trigger parse cloud beforesave('todo', (request) => { const todo = request object; if (!todo get('title')) { throw new error('todo must have a title'); } }); npmモジュールをインストールして使用する能力により、cloud codeは非常に柔軟になり、外部apiとの統合、データ変換の実行、または複雑なサーバーサイドロジックの実行が可能になります。 典型的な使用例 ビジネスロジック 例えば、複数のオブジェクトプロパティを集計してゲーム内のユーザーのスコアを計算し、そのデータを自動的に保存することができます。 データ検証 レコードを保存または削除する前に、特定のフィールドが存在するか、ユーザーに正しい権限があるかを確認します。 トリガー データが変更されたときにアクションを実行します(例:ユーザーがプロフィールを更新したときに通知を送信)。 統合 サードパーティのapiやサービスと接続します。例えば、cloud codeから直接支払いゲートウェイ、slack通知、またはメールマーケティングプラットフォームと統合することができます。 セキュリティ強化 cloud code関数内で入力パラメータを検証およびサニタイズすることで、追加のセキュリティ層を追加します。 関数をデプロイする 以下は、クライアントから送信されたテキスト文字列の長さを計算するシンプルなcloud code関数です。 main js // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); デプロイするには、 back4app cli 1 cliをインストールする: linux/macosの場合 curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash windowsの場合: b4a exe b4a exe ファイルを リリースページ https //github com/back4app/parse cli/releases からダウンロードします。 2 アカウントキーを設定する: b4a configure accountkey 3 クラウドコードをデプロイする: b4a deploy ダッシュボードを通じてデプロイする アプリのダッシュボードで、 クラウドコード > 関数 に移動します。 関数を main js エディタにコピー/ペーストします。 「 デプロイ 」をクリックします。 関数を呼び出す expressjsアプリケーションから、parse sdkを使用してcloud code関数を呼び出すことができます const parse = require(' /parseconfig'); async function gettextlength(text) { try { const result = await parse cloud run('calculatetextlength', { text }); console log('text length ', result length); } catch (err) { console error('error calling cloud function ', err); } } rest経由でも呼び出すことができます curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength またはgraphql経由で mutation { calculatetextlength(input { text "hello graphql" }) { result } } この柔軟性により、expressjsバックエンドやrestまたはgraphqlをサポートする他のクライアントにカスタムロジックを統合することができます。 ステップ5 – ユーザー認証の設定 back4appにおけるユーザー認証 back4appは、 parse user クラスを認証の基盤として活用しています。デフォルトでは、parseはパスワードのハッシュ化、セッショントークン、セキュアストレージを処理します。これは、複雑なセキュリティフローを手動で設定する必要がないことを意味します。 ユーザー認証の設定 expressアプリケーションでは、ユーザーのサインアップとログインのためのルートを作成することができます。 // routes/user js const express = require('express'); const router = express router(); const parse = require(' /parseconfig'); // sign up route router post('/signup', async (req, res) => { try { const { username, password, email } = req body; const user = new parse user(); user set('username', username); user set('password', password); user set('email', email); await user signup(); res status(201) json({ message 'user signed up successfully!' }); } catch (error) { res status(500) json({ error 'error signing up user', details error message }); } }); // log in route router post('/login', async (req, res) => { try { const { username, password } = req body; const user = await parse user login(username, password); res status(200) json({ message 'user logged in', user }); } catch (error) { res status(401) json({ error 'invalid credentials', details error message }); } }); module exports = router; rest経由でのログインは次のようになります curl x get \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ g \\ \ data urlencode 'username=alice' \\ \ data urlencode 'password=secret123' \\ https //parseapi back4app com/login セッション管理 成功したログインの後、parseはユーザーオブジェクトに保存される セッショントークン を作成します。expressアプリでは、このトークンをセッションに保存するか、クライアントに返すことができます const currentuser = parse user current(); if (currentuser) { console log('currently logged in user ', currentuser getusername()); } else { console log('no user is logged in'); } parseはバックグラウンドでトークンベースのセッションを自動的に処理しますが、手動で管理または取り消すこともできます。これは、ログアウトする必要があるときに便利です await parse user logout(); ソーシャルログインの統合 back4appとparseは、追加のパッケージをインストールするか、既存のアダプターを使用することで、 google や facebook などの人気のoauthプロバイダーと統合できます。たとえば、 facebook app id を設定し、 parse facebookutils login() を使用することで、facebookログインを設定できます。詳細な手順は異なるため、 ソーシャルログインのドキュメント。 https //www back4app com/docs/platform/sign in with apple const facebooklogin = async () => { try { const user = await parse facebookutils login('email'); console log(user existed() ? 'user logged in' 'user signed up and logged in'); } catch (error) { console error('error logging in with facebook ', error); } }; メール確認とパスワードリセット メール確認とパスワードリセットを有効にするには back4appダッシュボードの メール設定 に移動します。 メール確認を有効にする ことで、新しいユーザーがメールアドレスの所有権を確認できるようにします。 送信元アドレスを設定する , メールテンプレート、および必要に応じてカスタムドメインを設定します。 これらの機能は、ユーザーがメールの所有権を確認し、安全なパスワード回復方法を提供することで、アカウントのセキュリティとユーザーエクスペリエンスを向上させます。 ステップ6 – ファイルストレージの取り扱い ファイルのアップロードと取得 parseには、ファイルのアップロードを処理するための parse file クラスが含まれており、back4appが安全に保存します。expressルートでは、次のようにできます const express = require('express'); const router = express router(); const multer = require('multer'); // for handling file uploads const upload = multer({ dest 'uploads/' }); const parse = require(' /parseconfig'); router post('/upload', upload single('file'), async (req, res) => { try { const { file } = req; if (!file) { return res status(400) json({ error 'no file uploaded' }); } const parsefile = new parse file(file originalname, file); const savedfile = await parsefile save(); res status(200) json({ url savedfile url() }); } catch (err) { res status(500) json({ error 'error uploading file', details err message }); } }); module exports = router; データベース内のオブジェクトにファイルを添付するには、次のようにします const photo = parse object extend('photo'); const photo = new photo(); photo set('imagefile', parsefile); await photo save(); ファイルのurlを取得するのは簡単です const imagefile = photo get('imagefile'); const imageurl = imagefile url(); その後、expressルートで imageurl を提供または応答することができます。 ファイルのセキュリティ parse serverは、ファイルアップロードのセキュリティを管理するための柔軟な設定を提供します。以下の例は、誰がサーバーにファイルをアップロードできるかを制御するための権限を設定する方法を示しています enableforpublic trueに設定すると、認証状態に関係なく、誰でもファイルをアップロードできるようになります。 enableforanonymoususer 匿名ユーザー(サインアップしていないユーザー)がファイルをアップロードできるかどうかを制御します。 enableforauthenticateduser 認証されたユーザーのみがファイルをアップロードできるかどうかを指定します。 ステップ7 – クラウドジョブを使用したタスクのスケジューリング クラウドジョブ クラウドジョブ はback4appでバックエンド上の定期的なタスクをスケジュールして実行できます。例えば、古いデータのクリーンアップや毎日の要約メールの送信などです。典型的なクラウドジョブは次のようになります // main js parse cloud job('cleanupoldtodos', async (request) => { // this runs in the background, not triggered by a direct user request const todo = parse object extend('todo'); const query = new parse query(todo); // for example, remove todos older than 30 days const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); クラウドコードをデプロイする 新しいジョブと共に(cliまたはダッシュボード経由で)。 back4appダッシュボードに移動する > アプリ設定 > サーバー設定 > バックグラウンドジョブ ジョブをスケジュールする 毎日またはニーズに合った間隔で実行されるように。 クラウドジョブは、手動の介入を必要とせずにバックグラウンドメンテナンスやその他の定期的なプロセスを自動化することを可能にします。 ステップ8 – ウェブフックの統合 webhooks は、特定のイベントが発生するたびに、back4appアプリが外部サービスにhttpリクエストを送信できるようにします。これは、決済ゲートウェイ(例:stripe)、メールマーケティングツール、または分析プラットフォームなどのサードパーティシステムと統合するために強力です。 webhooks設定に移動 あなたのback4appダッシュボード > その他 > webhooksに行き、次に「webhookを追加」をクリックします。 エンドポイントを設定 (例: https //your external service com/webhook endpoint https //your external service com/webhook endpoint )。 トリガーを設定 して、back4appのクラスやcloud code関数でどのイベントがwebhookを発火させるかを指定します。 例えば、新しいtodoが作成されるたびにslackチャンネルに通知したい場合: 受信webhookを受け入れるslackアプリを作成します。 slackのwebhook urlをコピーします。 back4appダッシュボードで、「todoクラスの新しいレコード」というイベントのために、そのslack urlにエンドポイントを設定します。 必要に応じてカスタムhttpヘッダーやペイロードを追加することもできます。 cloud codeでwebhooksを定義することもできます。beforesaveやaftersaveのトリガーでカスタムhttpリクエストを作成します ステップ9 – back4app管理パネルの探索 「 back4app admin app 」は、非技術的なユーザーがcrud操作を実行し、コードを書くことなく日常的なデータタスクを処理するために設計されたウェブベースの管理インターフェースです。これは、「 モデル中心 」で、「 ユーザーフレンドリー 」なインターフェースを提供し、データベース管理、カスタムデータ管理、エンタープライズレベルの操作を効率化します。 管理アプリの有効化 「 有効化 」を選択し、「 app dashboard > more > admin app 」に移動して、「管理アプリを有効化」ボタンをクリックします。 最初の管理ユーザーを作成します (ユーザー名/パスワード)。これにより、新しい役割(b4aadminuser)とクラス(b4asetting、b4amenuitem、b4acustomfield)がアプリのスキーマに自動的に生成されます。 管理インターフェースにアクセスするためのサブドメインを選択し、セットアップを完了します。 ログイン あなたが作成した管理者資格情報を使用して、新しい管理アプリのダッシュボードにアクセスします。 一度有効にすると、back4app管理アプリは、parseダッシュボードやバックエンドコードを直接使用することなく、データベースのレコードを簡単に表示、編集、または削除することができます。設定可能なアクセス制御を使用することで、データを管理するための明確でポイント&クリックの方法が必要なチームメンバーやクライアントとこのインターフェースを安全に共有できます。 結論 この包括的なチュートリアルに従うことで、あなたは 安全なバックエンドを作成しました back4app上のexpressjsアプリ用。 データベースを構成しました クラススキーマ、データ型、関係を使用して。 リアルタイムクエリを統合しました (ライブクエリ)即時データ更新のため。 セキュリティ対策を適用しました aclとclpを使用してデータアクセスを保護および管理。 cloud codeを実装しました サーバー側でカスタムビジネスロジックを実行するための関数。 ユーザー認証を設定しました メール確認とパスワードリセットをサポート。 ファイルのアップロードを管理しました オプションのファイルセキュリティコントロール付き。 cloud jobsをスケジュールしました 自動化されたバックグラウンドタスクのため。 webhooksを使用しました 外部サービスとの統合のため。 back4app管理パネルを探索しました データ管理のため。 堅牢なexpressjsサーバーと強力なback4appバックエンドを持つことで、機能豊富でスケーラブルかつ安全なアプリケーションを開発する準備が整いました。より高度な機能を探求し、ビジネスロジックを統合し、back4appの力を活用してサーバーとデータベースの管理にかかる無数の時間を節約してください。コーディングを楽しんでください! 次のステップ 生産準備が整ったexpressjsアプリを構築する このバックエンドを拡張して、より複雑なデータモデル、キャッシング戦略、パフォーマンス最適化を処理します。 高度な機能を統合する 専門的な認証フロー、役割ベースのアクセス制御、または外部api(支払いゲートウェイなど)を含みます。 back4appの公式ドキュメントをチェックする 高度なセキュリティ、パフォーマンス調整、ログ分析についての詳細な情報を得るために。 他のチュートリアルを探る リアルタイムチャットアプリケーション、iotダッシュボード、または位置情報サービスに関するものです。ここで学んだ技術をサードパーティのapiと組み合わせて、複雑な実世界のアプリケーションを作成できます。