Quickstarters
Feature Overview
如何为 NativeScript 构建后端?
44 分
介绍 在本教程中,您将学习 如何为 nativescript 构建后端 ,使用 back4app,这是一个简化移动应用后端开发的开源平台。 我们将逐步整合 back4app 的基本功能——如数据库管理、云代码函数、rest 和 graphql api 端点、用户身份验证以及实时查询(实时查询)——以创建一个安全且可扩展的 nativescript 应用后端。 您还将发现,与手动服务器和数据库配置相比,back4app 大大减少了设置时间。 我们将探索高级安全机制、使用云作业调度任务,以及使用 webhook 连接第三方服务。 在本指南结束时,您将拥有一个灵活的后端,利用 nativescript core,这为 nativescript 的跨平台移动解决方案提供支持。 有了这个基础,您将准备好根据需要集成自己的自定义逻辑或外部 api。这将是开发生产就绪的 nativescript 应用程序的重要一步。 先决条件 一个 back4app 账户和一个新的 back4app 项目 开始使用 back4app。 https //www back4app com/docs/get started/new parse app 如果您没有账户,可以免费创建一个。请按照上面的指南准备好您的项目。 基本的 nativescript 开发环境 您可以使用 nativescript cli 或其他首选工作流程来设置此环境。 nativescript 入门指南。 https //docs nativescript org/environment setup 安装 node js(版本 14 或更高) 您将需要 node js 来安装 npm 包和运行 nativescript cli。 安装 node js https //nodejs org/en/download/ 熟悉 javascript 和 nativescript core nativescript 官方文档。 https //docs nativescript org/ 如果您是 nativescript 新手,请在开始之前查看官方文档或初学者教程。 在开始之前,请确保您具备所有这些先决条件。设置好您的 back4app 项目并准备好本地的 nativescript 环境将帮助您更轻松地跟随。 步骤 1 – 设置 back4app 项目 创建新项目 在 back4app 上构建您的 nativescript 后端的第一步是创建一个新项目。如果您还没有,请按照以下步骤操作: 登录到您的 back4app 账户 。 点击您的 back4app 仪表板中的 “新应用” 按钮 。 给您的应用命名 (例如,“nativescript backend tutorial”)。 创建项目后,您将在 back4app 仪表板中看到它列出。该项目将作为本教程中涵盖的所有后端配置的基础。 连接 parse sdk back4app 使用 parse 平台来处理您的数据、实时功能、用户身份验证等。要将您的 nativescript 应用连接到 back4app,请安装 parse npm 包,并使用您从 back4app 仪表板获得的凭据进行初始化。 获取您的 parse 密钥 在您的 back4app 仪表板中,转到您应用的 “应用设置” 或 “安全性与密钥” 部分。查找您的 应用程序 id , javascript 密钥 , 和 parse 服务器 url (格式为 https //parseapi back4app com )。 安装 parse sdk npm install parse 然后, 初始化 parse 在配置文件或您的主入口文件中(例如, app js )。例如,您可以在基于 nativescript 的项目中创建一个名为 parseconfig js 的文件: src/parseconfig js import parse from 'parse'; // replace the placeholders with your back4app credentials parse initialize('your application id', 'your javascript key'); parse serverurl = 'https //parseapi back4app com'; export default parse; 每当您需要在 nativescript 应用中访问 parse 时,只需导入此文件。通过完成此步骤,您已在 nativescript 前端和 back4app 后端之间建立了安全连接,从而简化了数据操作。 步骤 2 – 设置数据库 保存和查询数据 在您的 back4app 项目准备好并集成 parse sdk 后,您可以从 nativescript 应用中保存和查询数据。以下是使用 parse object 类保存和获取项目列表的示例: // example create a task item import parse from ' /parseconfig'; async function createtaskitem(title, iscompleted) { const task = parse object extend('task'); const task = new task(); task set('title', title); task set('iscompleted', iscompleted); try { const savedtask = await task save(); console log('task saved successfully ', savedtask); return savedtask; } catch (error) { console error('error saving task ', error); } } // example query all task items async function fetchtasks() { const task = parse object extend('task'); const query = new parse query(task); try { const results = await query find(); console log('fetched task items ', results); return results; } catch (error) { console error('error fetching tasks ', error); } } 如果您更喜欢直接的 http 调用,您也可以使用 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 supplies", "iscompleted" false}' \\ https //parseapi back4app com/classes/task 或者使用 graphql mutation { createtask(input { fields { title "clean the house" iscompleted false } }) { task { objectid title iscompleted } } } 这种灵活性使得通过 parse sdk、rest 或 graphql api 端点为您的 nativescript 应用程序构建后端功能变得方便。 架构设计和数据类型 默认情况下,parse 可以自动动态创建架构,或者您可以在 back4app 仪表板中定义您的类和数据类型 转到您的 back4app 仪表板中的“数据库”部分 创建一个新类 (例如,“任务”)并添加像标题(字符串)和已完成(布尔值)这样的列。 back4app 支持数据类型,如 字符串 , 数字 , 布尔值 , 对象 , 日期 , 文件 , 指针 , 数组 , 关系 , 地理点 , 和 多边形 您可以选择在首次保存对象时让 parse 创建这些列,或者定义它们以获得更多控制。 使用 back4app 的 ai 代理 也可以帮助您自动生成模式: 打开 ai 代理 在您的应用仪表板中。 描述您想要的数据模型 (例如,“请为移动应用创建一个新的任务类,包含 iscompleted 和 duedate 字段。”)。 让代理自动创建模式 关系数据 如果您想要关系数据——例如一个指向多个 任务 项的 类别 对象——请在 parse 中使用 指针 或 关系 : // linking a task to a category with a pointer async function createtaskforcategory(categoryobjectid, title) { const task = new parse object('task'); const categorypointer = new parse object('category'); categorypointer id = categoryobjectid; task set('title', title); task set('category', categorypointer); try { return await task save(); } catch (err) { console error('error creating task with category relationship ', err); } } // including the pointer data in a query const query = new parse query('task'); query include('category'); const taskswithcategory = await query find(); 这种方法帮助您在单个查询中获取 任务 及其相关 类别 的完整数据。 实时查询 要获取实时更新,请在 back4app 仪表板的 服务器设置 下启用 实时查询 。nativescript 开发人员可以订阅特定类的更改。更新您的 parse 设置以包含实时查询服务器 url: src/parseconfig js import parse from 'parse'; // replace the placeholders with your back4app credentials parse initialize('your application id', 'your javascript key'); parse serverurl = 'https //parseapi back4app com'; parse livequeryserverurl = 'wss\ //your subdomain here b4a io'; export default parse; 然后订阅实时事件 import parse from ' /parseconfig'; async function subscribetotasks(callback) { const query = new parse query('task'); const subscription = await query subscribe(); subscription on('create', (newtask) => { console log('new task created ', newtask); callback('create', newtask); }); subscription on('update', (updatedtask) => { console log('task updated ', updatedtask); callback('update', updatedtask); }); subscription on('delete', (deletedtask) => { console log('task deleted ', deletedtask); callback('delete', deletedtask); }); return subscription; } 此订阅会在每次添加、修改或删除一个 task 时自动更新您的 ui——非常适合实时协作的 nativescript 应用程序。 步骤 3 – 使用 acl 和 clp 应用安全性 back4app 安全机制 back4app 结合了 访问控制列表 (acls) 和 类级权限 (clps) 来保护您的数据。这些安全模型允许您控制类和对象级别的读/写访问权限。 访问控制列表 (acls) acl 为每个对象设置权限。例如,仅给予所有者读和写访问权限 async function createprivatetask(title, owneruser) { const task = parse object extend('task'); const task = new task(); task set('title', title); const acl = new parse acl(owneruser); acl setpublicreadaccess(false); acl setpublicwriteaccess(false); task setacl(acl); try { return await task save(); } catch (err) { console error('error saving private task ', err); } } 这确保只有指定的用户可以修改或读取该对象。 类级权限 (clps) clps 设置整个类的默认权限: 打开数据库 在 back4app 中并选择相关类。 访问类级权限 标签。 根据需要调整公共、经过身份验证的用户或特定角色的权限。 结合 acl 和 clp 为 nativescript 应用程序提供了强大的安全模型。有关更多信息,请参见 应用安全指南 https //www back4app com/docs/security/parse security 。 步骤 4 – 编写和部署云函数 云代码让您可以在服务器端运行自定义 javascript 代码,因此您无需自己维护基础设施。这非常适合在您的 nativescript 后端中添加高级逻辑或仅限服务器的集成。 它是如何工作的 您通常将 cloud code(javascript 函数、触发器和任何所需的 npm 模块)放在一个 main js 文件中。然后将其部署到 back4app,它将在 parse server 环境中运行,无需额外的服务器配置。 示例 main js 结构 const axios = require('axios'); 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; }); parse cloud beforesave('task', (request) => { const task = request object; if (!task get('title')) { throw new error('task must have a title'); } }); 您可以安装和使用 npm 包,如 axios 进行 http 请求。这种方法使得从支付网关到外部 api 的广泛集成成为可能,所有这些都在您 back4app 应用的安全保护下。 典型用例 业务逻辑 自动计算、数据转换或状态更新。 数据验证 确保在保存之前所需字段存在。 触发器 在数据创建、更新或删除时运行代码。 集成 连接外部服务进行支付、分析或消息传递。 安全执行 在继续之前验证传入数据或用户角色。 部署您的函数 这是一个简单的函数,用于计算文本长度: main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); 通过 https //www back4app com/docs/local development/parse cli 安装 cli curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash 对于 windows,下载 b4a exe https //github com/back4app/parse cli/releases/download/release 3 3 1/b4a exe 文件从 发布页面 https //github com/back4app/parse cli/releases 配置您的账户密钥 b4a configure accountkey 部署您的云代码 b4a deploy 通过仪表板进行部署 前往 cloud code > functions 在您的仪表板中。 将您的函数代码粘贴到 main js 中。 点击 部署 。 调用您的函数 通过您的 nativescript 应用程序使用 parse sdk import parse from ' /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 或 graphql 调用它 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 mutation { calculatetextlength(input { text "hello graphql" }) { result } } 这为您提供了一种灵活的方式,将服务器端逻辑集成到基于 nativescript 的移动应用程序中。 步骤 5 – 配置用户身份验证 back4app中的用户认证 back4app使用 parse user 类来处理认证,包括密码哈希、会话令牌等。这消除了管理用户帐户相关的许多复杂性。 设置用户认证 在您的nativescript应用中,您可以创建一个新用户: import parse from ' /parseconfig'; async function signupuser(username, password, email) { const user = new parse user(); user set('username', username); user set('password', password); user set('email', email); try { await user signup(); console log('user signed up successfully!'); } catch (error) { console error('error signing up user ', error); } } async function loginuser(username, password) { try { const user = await parse user login(username, password); console log('user logged in ', user); } catch (error) { console error('error logging in user ', error); } } 一个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会分配一个 会话令牌 给用户。要检查当前登录的用户: const currentuser = parse user current(); if (currentuser) { console log('logged in user ', currentuser getusername()); } else { console log('no user is logged in'); } 注销很简单 await parse user logout(); 社交登录集成 parse 还与像 google 或 facebook 等 oauth 提供商集成。每个提供商的设置有所不同,请查看 使用 apple 和其他服务登录 https //www back4app com/docs/platform/sign in with apple 的详细信息。例如,使用 facebook 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 仪表板中启用这些功能 导航到电子邮件设置 在您的 back4app 应用中 启用电子邮件验证 和 密码重置 配置您的电子邮件模板和“发件人”地址 第 6 步 – 处理文件存储 上传和检索文件 back4app 支持通过 parse file 类进行文件管理。在 nativescript 中,您可以以类似的方式上传图像或文档: import parse from ' /parseconfig'; async function uploadimage(file) { const name = file name; const parsefile = new parse file(name, file); try { const savedfile = await parsefile save(); console log('file saved ', savedfile url()); return savedfile url(); } catch (err) { console error('error uploading file ', err); } } async function createphotoobject(file) { const photo = parse object extend('photo'); const photo = new photo(); const parsefile = new parse file(file name, file); photo set('imagefile', parsefile); return await photo save(); } 您可以从保存的对象中检索文件的 url: const imagefile = photo get('imagefile'); const imageurl = imagefile url(); // use imageurl in your nativescript ui components 文件安全性 parse server 允许您配置文件上传安全性: { "fileupload" { "enableforpublic" true, "enableforanonymoususer" true, "enableforauthenticateduser" true } } 这确保您可以根据安全偏好限制或允许文件上传。 第 7 步 – 使用云作业调度任务 云作业 云作业 帮助您自动化常规任务,例如删除过期记录或发送通知。例如: // main js parse cloud job('cleanupoldtasks', async (request) => { const task = parse object extend('task'); const query = new parse query(task); 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 oldtasks = await query find({ usemasterkey true }); await parse object destroyall(oldtasks, { usemasterkey true }); return `deleted ${oldtasks length} old tasks `; } catch (err) { throw new error('cleanup error ' + err message); } }); 通过 cli 或仪表板 部署此作业。 在 back4app 仪表板 > 服务器设置 > 背景作业 ,安排它每天运行或按您选择的间隔运行。 步骤 8 – 集成 webhooks webhooks 让您在应用程序中发生某些事件时向外部服务发送 http 请求,例如新记录或用户注册。这可以用于与 slack、支付网关或分析平台集成。 转到 webhooks 配置 在您的 back4app 仪表板中并选择 添加 webhook 。 添加您的端点 url(例如, https //your service com/webhook )。 为特定类或事件配置触发器 。 您还可以在云代码中定义 webhooks 或在触发器中直接调用外部 api,例如 beforesave 或 aftersave 。 第9步 – 探索 back4app 管理面板 “ back4app 管理应用 ”是一个以模型为中心、用户友好的数据管理界面。它帮助团队或非技术用户执行 crud 操作,创建自定义仪表板,并管理企业级任务,而无需编写代码。 启用管理应用 在你的 应用仪表板 , 点击 更多 > 管理应用 。 启用管理应用 。 b4aadminuser ”角色和相关类( b4asetting , b4amenuitem , 等)到你的模式中。 选择一个子域名,然后使用你的新管理员凭据登录: 该门户允许快速数据操作,而无需离开图形界面——这是与可能不熟悉编码的团队成员协作的绝佳解决方案。 结论 通过遵循本指南,您已经学习了 如何为 nativescript 构建后端 ,并且 为您的 nativescript 应用创建了一个安全的后端 。 配置了一个数据库 ,包括类、模式和关系。 实现了实时查询 以便进行实时更新。 通过 acl 和 clp 保护您的数据 。 通过云代码扩展功能 。 设置了身份验证 以便用户注册、登录和会话令牌。 管理文件上传 和通过 parse 文件检索。 安排云作业 以便进行自动化的定期任务。 创建 webhooks 以便进行第三方集成。 使用 back4app 管理面板 进行无代码的数据管理。 这些步骤为使用 nativescript core 构建开源跨平台移动应用程序奠定了坚实的基础。继续探索高级功能,整合更多 api 端点,或集成您自己的自定义逻辑,以根据应用程序的确切需求量身定制后端。 下一步 通过优化性能、缓存和安全规则来 扩展您的 nativescript 应用程序。 探索高级用户管理 例如基于角色的权限。 查看官方 back4app 文档 以获取有关安全、日志和性能的深入指南。 尝试真实世界的集成 例如支付或分析工具。 祝您编码愉快,并享受 back4app 提供的简化开发工作流程!