ParseJS学习笔记一

37次阅读
没有评论

共计 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. 最佳实践清单(速记)

  1. 严格权限:先配 CLP(关闭匿名写)、再用 ACL/Role 做细粒度控制。必要时 Cloud Code + useMasterKey。(Parse Platform)
  2. 字段与索引:为查询条件字段建索引,定期回顾慢查询。(CSDN 博客)
  3. 模型约束:在 beforeSave 做类型与业务校验。
  4. 分层代码:客户端以 Query + 云函数 为主,避免在前端拼装过多私密逻辑。
  5. 环境区分:dev/staging/prod 使用不同 APP_ID 与数据库。
  6. LiveQuery:对高频变更的列表使用订阅替代轮询。(Parse Platform)
  7. 日志与监控:开启 Parse Server 日志;重要作业用 Cloud Job 并监控状态。(Parse Platform)

17. 官方文档

  • 官方 JavaScript 指南(安装、初始化、查询、LiveQuery 等核心能力)。(Parse Platform)
  • 官方 Cloud Code 指南(云函数、触发器、Jobs、权限、会话与 token)。(Parse Platform)
  • JS SDK 仓库与发行说明(了解平台差异与最新变更)。(GitHub)
  • 面向新手的一步步上手示例(包含完整 HTML Demo)。(Back4app™)

正文完
 0
一诺
版权声明:本站原创文章,由 一诺 于2025-10-12发表,共计6306字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码