一分钟在本地轻松调试云函数
- ** 🤟** 一站式轻松构建小程序、Web网站、移动应用 :👉****[在线地址]
MemFire Cloud云函数,是运行在云端(服务器端)的、无关联、可重复使用的函数代码。使用MemFire Cloud云函数,您无需购买、管理服务器等基础设施,只需编写和上传代码。MemFire Cloud云函数为您准备好了计算资源,可以弹性、可靠的运行任务,从而可轻松构建任何类型的应用和服务。
本篇文章将向你介绍当你在MemFire Cloud上使用云函数时,如何在本地进行云函数的调试。 准备工作
- 创建应用
- 在应用的SQL编辑器里创建数据表tasks,并插入一条数据,为接下来云函数的调用做准备。
create table
public.tasks (
id bigint generated by default as identity,
created_at timestamp with time zone not null default now(),
task text null,
constraint tasks_pkey primary key (id)
) tablespace pg_default;
INSERT INTO tasks (id, created_at , task ) VALUES
(1, '2019-04-22 14:33:41', '第一')
执行上述命令结果如下:
第一步:云函数的代码开发 云函数开发可参考教程:docs.memfiredb.com/docs/app/de… 接下来,我将带领大家如何来开发一个云函数。
- 新建一个空的项目文件,在文件夹下创建云函数示例代码
index.js
const sup = require('@supabase/supabase-js')
// supabase客户端 let supabase
// 云函数入口文件 exports.handler = async (req, resp, context) => {
// 解决跨域问题
resp.setHeader('Access-Control-Allow-Origin', '*') // *可以改成你的服务域名
resp.setHeader('Access-Control-Allow-Methods', '*');
resp.setHeader('Access-Control-Allow-Headers', '*');
resp.setHeader('Access-Control-Max-Age', '3600');
supabase = sup.createClient('URL', 'anon_key')
/** 请求参数
* method: 请求方法
* queries: 请求参数
* headers: 请求头
* body: 请求体, 为 Buffer 类型 */
const { method, queries, headers, body } = req
const { action } = queries
// 解决跨域问题
if (req.method === 'OPTIONS') {
resp.setStatusCode(204)
resp.send('');
} else if (method === 'GET') {
// 获取请求参数
const { data, error} = await supabase
.from('tasks')
.select('*')
if (error) {
// 返回响应
resp.setStatusCode(403)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify({
status: 403
}))
}
resp.setStatusCode(200)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify(data))
} else if (method === 'POST') {
try {
const result = JSON.parse(req.body.toString())
const { data, error } = await supabase.from('tasks').insert({ task: result.task })
} catch (err) {
const result = JSON.parse(req.body.toString())
resp.setStatusCode(500)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify({
code: 'FAIL',
message: JSON.stringify(result) + JSON.stringify(err)
}))
}
resp.setStatusCode(200)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify({
code: 'SUCCESS',
}))
} else if (method === 'DELETE') {
// 获取请求参数
try {
const { id} = queries
const { data, error } = await supabase.from('tasks').delete().eq('id', id)
} catch (err) {
resp.setStatusCode(500)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify({
code: 'FAIL',
message: err
}))
}
// 返回响应
resp.setStatusCode(200)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify({
code: 'SUCCESS',
}))
}
else {
resp.setStatusCode(200)
resp.setHeader('Content-Type', 'application/json')
resp.send(JSON.stringify({
code: 404,
msg: 'not found'
}))
}
}
如需访问MemFire Cloud的应用,请安装@supabase/supabase-js
依赖包,并在代码内(第16行)填写应用的URL
和anon_key
- 安装依赖包
npm i @supabase/supabase-js
第二步:创建本地服务器
您需要创建一个简单的HTTP服务器来处理和响应请求。这可以通过使用Node.js
内置的http或者express
模块来实现。
使用http模块
- 在项目文件的目录下新建一个
server.js
文件。 - 需要引入
Node.js
的http
模块,并使用您的index.js
中定义的handler
函数。
const http = require('http');
const { handler } = require('./index');
const server = http.createServer((req, res) => {
let body = '';
req.on('data', chunk => {
body += chunk; // 如果预期的请求会带有数据,可以在这里处理
});
req.on('end', () => {
// 模拟一下req对象中其他属性和方法
req.queries = {}; // 如果您的请求 URL 有查询字符串,您需要手动解析
req.path = req.url; // 简单处理,实际情况可能需要解析URL
req.method = req.method;
req.url = req.url;
req.clientIP = req.socket.remoteAddress;
// 设置状态码的方法
res.setStatusCode = function(statusCode) {
this.statusCode = statusCode;
};
// 发送响应的方法
res.send = function(data) {
this.setHeader("Content-Type", "application/json");
this.end(data);
};
// 用模拟的req和原生res对象调用您的handler
handler(req, res, {}); // 这里简单传递了一个空对象作为context
});
});
const PORT = 3000;
server.listen(PORT, () => {
console.log(`服务器运行在 http://localhost:${PORT}`);
});
第三步.运行本地服务器
- 确保您已经安装好
Node.js
环境。 - 打开命令行工具,导航到包含您的项目文件的目录。
- 运行
node server.js
来启动服务器。 第四步:调试服务 您可以使用各种工具来测试您的服务。最简单的方式是使用浏览器或者命令行工具如curl
。 这里我们选择curl
来调试服务
以上是通过GET
请求获取表数据,您也可以使用其他请求方式,只要遵循curl
操作指令就行。
转载自:https://juejin.cn/post/7352833711144779826