@@ -46,7 +46,7 @@ title: 云函数入门
46
46
47
47
使用浏览器或者 PostMan 等工具访问该地址,即可得到 ` hello laf ` 字符串。
48
48
::: warning
49
- 暂不能设置云函数url化的path
49
+ 暂不能设置云函数 url 化的 path
50
50
:::
51
51
52
52
### 通过 SDK 访问云函数
@@ -103,7 +103,7 @@ console.log(ret); // hello laf
103
103
| ` ctx.response ` | HTTP 响应,和` express ` 的` Response ` 实例保持一致 |
104
104
| ` ctx.socket ` | [ WebSocket] ( https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket ) 实例 |
105
105
| ` ctx.files ` | 上传的文件 ([ File] ( https://developer.mozilla.org/zh-CN/docs/Web/API/File ) 对象数组) |
106
- | ` ctx.env ` | 自定义的环境变量 ([ env] ( env.md ) ) |
106
+ | ` ctx.env ` | 自定义的环境变量 ([ env] ( env.md ) ) |
107
107
108
108
下面的例子可以读取用户传递的 Query 参数` username ` :
109
109
@@ -194,8 +194,8 @@ ctx.response.status(403); // 发送403状态码
194
194
下面的例子使用了 Node.js 内置的包 ` crypto ` ,来对密码进行哈希:
195
195
196
196
``` ts
197
- import cloud from " @/cloud-sdk " ;
198
- import * as crypto from " crypto" ;
197
+ import cloud from " @lafjs /cloud" ;
198
+ import crypto from " crypto" ;
199
199
200
200
exports .main = async function (ctx ) {
201
201
const { password } = await ctx .body ;
@@ -214,8 +214,8 @@ exports.main = async function (ctx) {
214
214
在使用 npm 包之前,需要在 _ 依赖管理_ 处安装对应的包。
215
215
216
216
``` ts
217
- import cloud from " @/cloud-sdk " ;
218
- import * as dayjs from " dayjs" ;
217
+ import cloud from " @lafjs /cloud" ;
218
+ import dayjs from " dayjs" ;
219
219
220
220
exports .main = function () {
221
221
return dayjs ().format ();
@@ -234,18 +234,18 @@ exports.main = function () {
234
234
235
235
刚刚编写的一些云函数都是比较基础的一些功能,但并没有和 Laf 的其他功能连接起来。
236
236
237
- 在云函数上,Laf 提供了云 SDK ` @/cloud-sdk ` 让云函数支持访问网络、数据库、对象存储等。
237
+ 在云函数上,Laf 提供了云 SDK ` @lafjs /cloud ` 让云函数支持访问网络、数据库、对象存储等。
238
238
239
239
::: warning
240
- ` @/cloud-sdk ` 是一个专有的模块,只能在云函数上使用,不支持通过 npm 安装到其他位置。
240
+ ` @lafjs /cloud ` 是一个专有的模块,只能在云函数上使用,不支持通过 npm 安装到其他位置。
241
241
:::
242
242
243
243
### 导入 SDK
244
244
245
245
SDK 的所有内容通过它的默认导出来访问。
246
246
247
247
``` js
248
- import cloud from " @/cloud-sdk " ;
248
+ import cloud from " @lafjs /cloud" ;
249
249
```
250
250
251
251
### 发送网络请求
@@ -255,7 +255,7 @@ import cloud from "@/cloud-sdk";
255
255
该接口是对 ` axios ` 请求库的封装,其调用方法与 ` axios ` 完全一致。
256
256
257
257
``` ts
258
- import cloud from " @/cloud-sdk " ;
258
+ import cloud from " @lafjs /cloud" ;
259
259
260
260
exports .main = async function (ctx ) {
261
261
const ret = await cloud .fetch ({
@@ -279,7 +279,7 @@ exports.main = async function (ctx) {
279
279
下面的例子可以获取数据库中的用户信息:
280
280
281
281
``` ts
282
- import cloud from " @/cloud-sdk " ;
282
+ import cloud from " @lafjs /cloud" ;
283
283
284
284
exports .main = async function (ctx ) {
285
285
const { username } = ctx .body ;
@@ -299,32 +299,29 @@ exports.main = async function (ctx) {
299
299
下方例子演示了创建用户成功后为用户发送邀请邮件(` send_mail ` 函数需自行实现):
300
300
301
301
``` ts
302
- import cloud from " @/cloud-sdk " ;
302
+ import cloud from " @lafjs /cloud" ;
303
303
304
304
// invoke方法模型
305
305
306
306
exports .main = async function (ctx ) {
307
- const { username } = ctx .body ;
307
+ const { username } = ctx .body ;
308
308
// 数据库操作
309
309
const db = cloud .database ();
310
310
const ret = await db .collection (" users" ).add ({
311
- name: ' jack' ,
312
- password: ' *******'
311
+ name: " jack" ,
312
+ password: " *******" ,
313
313
});
314
314
if (ret ?.ok ) {
315
- await cloud .invoke (
316
- ' send_mail' ,
317
- {
318
- ... ctx , // 如果函数内部需要使用ctx中的某些属性,可按此方法传入
319
- body: {
320
- title: ' xxx' ,
321
- content: ' xxx' ,
322
- date: ' xxx'
323
- }
324
- }
325
- )
315
+ await cloud .invoke (" send_mail" , {
316
+ ... ctx , // 如果函数内部需要使用ctx中的某些属性,可按此方法传入
317
+ body: {
318
+ title: " xxx" ,
319
+ content: " xxx" ,
320
+ date: " xxx" ,
321
+ },
322
+ });
326
323
}
327
-
324
+
328
325
console .log (ret );
329
326
return ret .ok ;
330
327
};
@@ -339,31 +336,28 @@ const { username } = ctx.body;
339
336
> 本例仅做` emit ` 示例使用,业务开发中可直接使用触发器监听` DatabaseChange:users#add ` 事件实现此功能。[ 查看详情] ( trigger.md )
340
337
341
338
``` ts
342
- import cloud from " @/cloud-sdk " ;
339
+ import cloud from " @lafjs /cloud" ;
343
340
344
341
// invoke方法模型
345
342
// invoke<T>(name: string, ctx: FunctionContext): Promise<T>
346
343
347
344
exports .main = async function (ctx ) {
348
- const { username } = ctx .body ;
345
+ const { username } = ctx .body ;
349
346
// 数据库操作
350
347
const db = cloud .database ();
351
348
const ret = await db .collection (" users" ).add ({
352
- name: ' jack' ,
353
- password: ' *******'
349
+ name: " jack" ,
350
+ password: " *******" ,
354
351
});
355
352
if (ret ?.ok ) {
356
- await cloud .emit (
357
- ' user_created' ,
358
- {
359
- ... ctx , // 如果函数内部需要使用ctx中的某些属性,可按此方法传入
360
- body: {
361
- id: ret ?.insertId
362
- }
363
- }
364
- )
353
+ await cloud .emit (" user_created" , {
354
+ ... ctx , // 如果函数内部需要使用ctx中的某些属性,可按此方法传入
355
+ body: {
356
+ id: ret ?.insertId ,
357
+ },
358
+ });
365
359
}
366
-
360
+
367
361
console .log (ret );
368
362
return ret .ok ;
369
363
};
@@ -386,7 +380,7 @@ const { username } = ctx.body;
386
380
> 注意:出于演示目的,对 password 以明文方式查询,并未做 hash 处理考虑,不建议实际开发过程中如此使用。
387
381
388
382
``` ts
389
- import cloud from " @/cloud-sdk " ;
383
+ import cloud from " @lafjs /cloud" ;
390
384
391
385
exports .main = async function (ctx ) {
392
386
const { username, password } = ctx .body ;
@@ -422,24 +416,24 @@ exports.main = async function (ctx) {
422
416
423
417
::: info
424
418
云函数全局内存单例对象,可跨多次调用、不同云函数之间共享数据
425
- ` cloud.shared ` 是JS中标准的Map对象,可参照MDN文档学习使用 :[ Map] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map )
419
+ ` cloud.shared ` 是 JS 中标准的 Map 对象,可参照 MDN 文档学习使用 :[ Map] ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map )
426
420
427
421
使用场景:
428
422
429
423
1 . 可将一些全局配置初始化到 shared 中,如微信开发信息、短信发送配置
430
424
2 . 可共享一些常用方法,如 checkPermission 等,以提升云函数性能
431
- 3 . 可做热数据的缓存。如:缓存微信access_token 。(建议少量使用,此对象是在 node vm 堆中分配,因为 node vm 堆内存限制)
432
- :::
425
+ 3 . 可做热数据的缓存。如:缓存微信 access_token 。(建议少量使用,此对象是在 node vm 堆中分配,因为 node vm 堆内存限制)
426
+ :::
433
427
434
428
``` ts
435
- import cloud from " @/cloud-sdk " ;
429
+ import cloud from " @lafjs /cloud" ;
436
430
437
431
exports .main = async function (ctx ) {
438
- await cloud .shared .set (key , val ) // 设置一个缓存
439
- await cloud .shared .get (key ) // 获取缓存的值
440
- await cloud .shared .has (key ) // 判断缓存是否存在
441
- await cloud .shared .delete (key ) // 删除缓存
442
- await cloud .shared .clear () // 清空所有缓存
432
+ await cloud .shared .set (key , val ); // 设置一个缓存
433
+ await cloud .shared .get (key ); // 获取缓存的值
434
+ await cloud .shared .has (key ); // 判断缓存是否存在
435
+ await cloud .shared .delete (key ); // 删除缓存
436
+ await cloud .shared .clear (); // 清空所有缓存
443
437
// ... 其他方法可访问上方MDN的Map文档查看
444
438
};
445
439
```
0 commit comments