共计 6306 个字符,预计需要花费 16 分钟才能阅读完成。
1. Parse 是什么?适用场景
Parse 是一个开源的后端平台(Parse Server)与多端 SDK 组合:你可以用 JavaScript SDK 在浏览器、Node.js、React Native 等环境里进行数据存取、用户登录、文件上传、实时订阅等,无需从零写后端。官方 JavaScript 指南与 API 文档长期维护,建议随用随查。(Parse Platform)
2. 环境与安装
2.1 后端(Parse Server)
你可以:
- 自建 Parse Server(Node.js + MongoDB),或
- 使用托管(如 Back4App 等),拿到
applicationId/serverURL即可直连。
快速理解 Cloud Code 与服务端能力,参考官方 Cloud Code 指南。(Parse Platform)
2.2 前端 /Node 客户端(JavaScript SDK)
安装(Node / 构建型前端):
npm install parse
# 或
yarn add parse
在浏览器里也可直接引入 CDN 版本:
<script src="https://unpkg.com/parse/dist/parse.min.js"></script>
以上做法皆来自官方 JS 指南。(Parse Platform)
3. 初始化(Browser / Node)
3.1 浏览器
<script src="https://unpkg.com/parse/dist/parse.min.js"></script>
<script>
// 典型:自建 Parse Server 只需 appId + serverURL
Parse.initialize("YOUR_APP_ID");
Parse.serverURL = "https://your-parse-server.example.com/parse";
// 若使用托管(如 Back4App),还会有 JavaScript Key:// Parse.initialize("APP_ID", "JAVASCRIPT_KEY");
// Parse.serverURL = "https://parseapi.back4app.com/";
</script>
官方文档说明了 npm 与预编译文件两种接入方式与初始化参数。(Parse Platform)
3.2 Node.js
import Parse from 'parse/node.js';
// 或 CommonJS: const Parse = require('parse/node');
Parse.initialize('YOUR_APP_ID');
// 如果你在 Parse Server 配置了 masterKey,可以在服务端使用:Parse.serverURL = 'https://your-parse-server.example.com/parse';
JS SDK 针对不同运行环境(Node、RN)提供适配,确保本地存储、会话与 HTTP 请求等依赖正确。(GitHub)
4. 数据模型与 CRUD
4.1 Class 与对象
Parse 中每种数据表称为 Class。无需手写 Schema(也可开启严格模式),直接用对象读写。
const Book = Parse.Object.extend('Book');
const book = new Book();
book.set('title', 'Clean Code');
book.set('price', 88);
await book.save(); // 新增
4.2 读取与更新
// 查询单条
const query = new Parse.Query('Book');
const one = await query.get('OBJECT_ID');
// 更新
one.set('price', 99);
await one.save();
// 删除
await one.destroy();
4.3 批量操作
const b1 = new Parse.Object('Book'); b1.set('title', 'A');
const b2 = new Parse.Object('Book'); b2.set('title', 'B');
await Parse.Object.saveAll([b1, b2]);
5. 查询(Query)进阶
const q = new Parse.Query('Book');
q.equalTo('title', 'Clean Code'); // 精确
q.greaterThan('price', 50); // 比较
q.matches('title', /^Clean/i); // 正则
q.include('author'); // 预加载 Pointer
q.limit(20).skip(0).ascending('price');
const results = await q.find();
复合条件 , 子查询 、 地理位置 、 全文检索(依赖 MongoDB 索引) 等能力详见官方 JS 指南。(Parse Platform)
6. 关系建模
6.1 Pointer(一对多 / 多对一)
const Author = Parse.Object.extend('Author');
const a = await new Author().set('name', 'Bob').save();
const book = new Parse.Object('Book');
book.set('title', 'Patterns');
book.set('author', a); // Pointer
await book.save();
6.2 Relation(多对多)
const group = new Parse.Object('Group');
await group.save();
const relation = group.relation('members');
relation.add([user1, user2]);
await group.save();
7. 权限与安全(必须掌握)
- CLP(Class Level Permissions):限制 Class 的读写、创建、删除、查询等。
- ACL(Access Control List):逐对象设置可读 / 写用户或角色。
- Pointer Permissions:基于字段的细粒度控制(如“作者只能改自己文章”)。
这些安全机制在官方文档有系统说明,配合 Cloud Code 与 useMasterKey 可实现严格访问控制。(Parse Platform)
8. 用户体系与认证
8.1 注册 / 登录 / 会话
// 注册
const user = new Parse.User();
user.set('username', 'alice');
user.set('password', 's3cret');
user.set('email', 'a@b.com');
await user.signUp();
// 登录
const logged = await Parse.User.logIn('alice', 's3cret');
// 当前用户(前端环境)const current = Parse.User.current();
// 登出
await Parse.User.logOut();
8.2 第三方登录
Parse 支持自定义 AuthProvider,可在 Cloud Code/Server 端编写校验逻辑,详见官方指南。(Parse Platform)
9. 文件、图片与云存储
// base64 / Blob / File 均可
const file = new Parse.File('avatar.png', { base64: base64Data});
await file.save();
const profile = new Parse.Object('Profile');
profile.set('avatar', file);
await profile.save();
文件托管可由 Parse Server 直传到本地或第三方(S3、GCS 等,取决于你的 Server 配置)。(Parse Platform)
10. Cloud Code(云代码)
Cloud Code 是部署在 Parse Server 侧的 JS 逻辑:可写 云函数 、 触发器(beforeSave/afterSave 等)、定时任务(Jobs),用于校验、聚合、对接第三方等。
10.1 云函数
cloud/main.js:
Parse.Cloud.define('sum', async (request) => {const { a, b} = request.params;
if (typeof a !== 'number' || typeof b !== 'number') {throw new Error('params a/b must be numbers');
}
return a + b;
});
客户端调用:
const result = await Parse.Cloud.run('sum', { a: 1, b: 2});
// result === 3
10.2 触发器(数据校验与审计)
Parse.Cloud.beforeSave('Book', async (request) => {
const book = request.object;
if (book.get('price') < 0) throw 'Price must be >= 0';
});
Cloud Code 的能力与最佳实践(比如在 Cloud 函数里用
request.user而非Parse.User.current())请参考官方指南。(Parse Platform)
11. 实时功能:LiveQuery
LiveQuery 允许前端订阅某个查询的结果变化(新增 / 修改 / 删除),适合聊天、动态看板等:
// 客户端
const query = new Parse.Query('Message');
query.equalTo('roomId', 'r1');
const subscription = await query.subscribe();
subscription.on('create', (obj) => console.log('new:', obj.toJSON()));
subscription.on('update', (obj) => console.log('upd:', obj.toJSON()));
subscription.on('delete', (obj) => console.log('del:', obj.id));
服务端需启动 LiveQuery Server 并在 SDK 端指定 liveQueryServerURL。详见官方指南。(Parse Platform)
12. TypeScript 支持
JS SDK 自带类型声明(在 GitHub Releases 与 npm 包中维护)。使用 parse 包并在 TS 项目中正常导入即可;遇到复杂场景可通过泛型扩展自定义字段类型。SDK 仓库与发行说明见此。(GitHub)
13. 调试与常见问题
- 云函数拿不到当前用户:在 Cloud Code 中使用
request.user,不要依赖Parse.User.current();若需要以某用户身份执行,需要传sessionToken。(myark.github.io) - 触发器不触发 / 函数不执行:检查函数名大小写、Cloud Code 路径、日志与返回 Promise;必要时核对
useMasterKey与 CLP/ACL 配置。实践向的故障清单可参考这类进阶文章。(CSDN 博客) - 索引与性能:为高频查询字段建索引,避免在触发器中做重活,善用批量操作与缓存(如内存 / 外部缓存层)。(CSDN 博客)
14. 最小可运行样例(浏览器版)
将以下文件保存为 index.html,替换 APP_ID / JS_KEY / serverURL,在浏览器打开即可(示例风格与用法与官方教学一致):(Back4app™)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="https://unpkg.com/parse/dist/parse.min.js"></script>
</head>
<body>
<h1>Parse JS Quickstart</h1>
<input id="username" placeholder="Username" />
<input id="email" type="email" placeholder="Email" />
<input id="password" type="password" placeholder="Password" />
<button id="signup">Sign Up</button>
<script>
// 方式 A:自建 Parse Server
Parse.initialize("APP_ID");
Parse.serverURL = "https://your-parse-server.example.com/parse";
// 方式 B:Back4App 等托管
// Parse.initialize("APP_ID", "JS_KEY");
// Parse.serverURL = "https://parseapi.back4app.com/";
document.getElementById('signup').addEventListener('click', async () => {const u = new Parse.User();
u.set('username', document.getElementById('username').value);
u.set('email', document.getElementById('email').value);
u.set('password', document.getElementById('password').value);
try {await u.signUp();
alert('Sign up success:' + u.id);
} catch (e) {alert('Error:' + e.message);
}
});
</script>
</body>
</html>
15. 项目结构建议
your-app/
├─ cloud/ # Cloud Code
│ └─ main.js
├─ public/ # 前端静态资源(若同仓)├─ src/ # 前端源代码
├─ server/ # 自建 Parse Server(可选)│ ├─ index.js
│ └─ config.json
└─ package.json
16. 最佳实践清单(速记)
- 严格权限:先配 CLP(关闭匿名写)、再用 ACL/Role 做细粒度控制。必要时 Cloud Code +
useMasterKey。(Parse Platform) - 字段与索引:为查询条件字段建索引,定期回顾慢查询。(CSDN 博客)
- 模型约束:在
beforeSave做类型与业务校验。 - 分层代码:客户端以 Query + 云函数 为主,避免在前端拼装过多私密逻辑。
- 环境区分:dev/staging/prod 使用不同
APP_ID与数据库。 - LiveQuery:对高频变更的列表使用订阅替代轮询。(Parse Platform)
- 日志与监控:开启 Parse Server 日志;重要作业用 Cloud Job 并监控状态。(Parse Platform)
17. 官方文档
- 官方 JavaScript 指南(安装、初始化、查询、LiveQuery 等核心能力)。(Parse Platform)
- 官方 Cloud Code 指南(云函数、触发器、Jobs、权限、会话与 token)。(Parse Platform)
- JS SDK 仓库与发行说明(了解平台差异与最新变更)。(GitHub)
- 面向新手的一步步上手示例(包含完整 HTML Demo)。(Back4app™)

