laf的简单操作代码片
Easul Lv4

文档参考

https://doc.laf.run/guide

环境变量获取

折叠代码块JAVASCRIPT 复制代码
1
let accessToken = cloud.env.ACCESS_TOKEN;

导入包

折叠代码块JAVASCRIPT 复制代码
1
import cloud from '@lafjs/cloud';

主入口

折叠代码块JAVASCRIPT 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 使用如下curl请求
// curl "https://xx.laf.run/xx?hello=workd#11" \
// -H "hello: world" \
// --data-raw "{\"a\": \"c\", \"b\": \"true\"}" \
// --compressed
export async function main(event, context) {
// 获取请求方法: POST
console.log(event.method)
// 获取请求参数:{ hello: 'workd' }
console.log(event.query)
// 获取请求头:
// {
// hello: 'world',
// }
console.log(event.headers)
// 获取请求体:
// 获取json格式,结果为c
console.log((event.body)["a"]);
// 获取xml格式,结果为
// {
// tousername: [ 'ttt' ],
// fromusername: [ 'xxx' ],
// createtime: [ '1681550308' ],
// msgtype: [ 'text' ],
// content: [ '/help' ],
// msgid: [ 'xxasdf' ]
// }
console.log(event.body.xml);

// 执行异步请求,并获取响应结果,结果为字符串类型
// doSth是具体的异步请求核心函数
// 超时走timeoutFunc()返回结果,否则走doSth()返回结果
const responseText = await Promise.race([
doSth(newMessage),
sleep(4000.0).then(() => timeoutFunc()),
]);

// 添加响应码
event.response.status(403);
// 添加响应头
event.response.set("helo", "world");
// 返回响应结果,即响应体
return responseText;
}

内部异步请求

折叠代码块JAVASCRIPT 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const data = JSON.stringify({
id: 1,
messages: "asdf"
});

const headers = {
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
};

const options = {
method: 'POST',
headers,
body: data
};

try {
const response = await fetch('https://test.com', options);
const result = await response.json();
if (response.status === 429) {
return {
error: '错误1'
}
}
// 去除多余的换行
return {
answer: "right"
}
} catch (error) {
console.error(error);
return {
error: "问题太难了 出错了. (uДu〃).",
}
}

数据库

折叠代码块JAVASCRIPT 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 文档参考: https://doc.laf.run/guide/db/query.html
// 创建数据库连接
const db = cloud.database();
// 使用数据库
const Message = db.collection('messages')
// 获取数据
// 按sessionId的值从sessionId字段查询,以createdAt倒序,并限制获取10条,获取所有结果
await Message.where({
sessionId
}).orderBy("createdAt", "desc").limit(10).get();
// 添加数据,键就是变量名
await Message.add({ token, answer, ...message });
// 删除数据
await Message.where({ sessionId }).remove()

常用语法

折叠代码块JAVASCRIPT 复制代码
1
2
3
4
5
6
7
8
// 字符串组装
let str = `${a[9]}你好${b}`

let list = [];
// 在数组最开始添加数据
list.unshift({a: "b"});
// 在数组末尾添加数据
list.push({a: "b"});

微信公众号

微信消息验证

折叠代码块JAVASCRIPT 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 导入包
import cloud from '@lafjs/cloud';

// 获取请求中的参数
const { signature, timestamp, nonce, echostr } = event.query;

// 验证
// token为自己在公众号设置的值
if (!verifySignature(signature, timestamp, nonce, token)) {
return 'Invalid signature';
}

// 如果是首次验证,则返回 echostr 给微信服务器
if (echostr) {
return echostr;
}

function verifySignature(signature, timestamp, nonce, token) {
const arr = [token, timestamp, nonce].sort();
const str = arr.join('');
const sha1 = crypto.createHash('sha1');
sha1.update(str);
return sha1.digest('hex') === signature;
}

返回消息格式

折叠代码块JAVASCRIPT 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// payload,用于存放用户的消息信息
// content,实际的返回内容
function toXML(payload, content) {
const timestamp = Date.now();
const { tousername: fromUserName, fromusername: toUserName } = payload;
return `
<xml>
<ToUserName><![CDATA[${toUserName}]]></ToUserName>
<FromUserName><![CDATA[${fromUserName}]]></FromUserName>
<CreateTime>${timestamp}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${content}]]></Content>
</xml>
`
}
 评论
来发评论吧~
Powered By Valine
v1.5.2